精华内容
下载资源
问答
  • QTreeView

    千次阅读 2019-07-10 21:49:53
    QTreeView QTreeView和QTableView有些相似,只是数据有点不一样 初始化: { d_tree_view = new QTreeView(); d_tree_view->setAnimated(true); d_tree_view->setExpandsOnDoubleClick(true); ...

    QTreeView

    QTreeView和QTableView有些相似,只是数据有点不一样

    初始化:

        {
            d_tree_view = new QTreeView();
            d_tree_view->setAnimated(true);
            d_tree_view->setExpandsOnDoubleClick(true);
            d_tree_view->setContextMenuPolicy(Qt::CustomContextMenu);
            d_tree_view->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    
            d_model = new PCModel();
            d_tree_view->setModel(d_model);
    
            layout_root->addWidget(d_tree_view);
        }
    

    // 习惯上连上一些槽函数,去操作QTreeView
    // 比如点击、双击、右键菜单

    
        connect(d_tree_view, SIGNAL(clicked(QModelIndex)), this, SLOT(slot_select_sw(QModelIndex)) );
        connect(d_tree_view, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(slot_show_sw(QModelIndex)) );
        connect(d_tree_view, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(slot_show_context_menu(QPoint)) );
    

    Item数据,主要是父子节点

    PCItem .h

    #ifndef PCITEM_H
    #define PCITEM_H
    
    #include <QObject>
    #include <QVector>
    #include <QDebug>
    
    class PCItem : public QObject
    {
        Q_OBJECT
    public:
        explicit PCItem(QObject* parent = 0);
        ~PCItem();
    
        int get_id() const;
        
        void clear();
    
        bool delete_item(PCItem* item);
    
    
    public:
        int get_index(PCItem* item);
    
    
    private:
        int d_id;
    
    public:
        PCItem* d_parent;
        // children
        QVector<PCItem*> d_children;
    
    public:
        QString d_name;
    
    	QString d_age;
    
    };
    
    #endif // PCITEM_H
    
    

    PCItem .cpp

    #include "PCItem.h"
    #include "coreutil/IdUtil.h"
    
    #include <QDir>
    #include <QDateTime>
    #include <QFileInfo>
    
    #include <iostream>
    
    PCItem::PCItem(QObject* parent)
        : QObject(parent),
          d_parent(0),
          d_children(QVector<PCItem*>())
    {
        d_id = IdUtil::get_id();
    }
    
    
    
    PCItem::~PCItem()
    {
        QVector<PCItem*>::iterator begin = d_children.begin();
        QVector<PCItem*>::iterator end = d_children.end();
        while(begin != end) {
            delete *begin;
            *begin = 0;
            ++begin;
        }
    }
    
    
    
    int
    PCItem::get_id() const
    {
        return d_id;
    }
    
    
    void
    PCItem::clear()
    {
    
    }
    
    
    void
    PCItem::clear_read_info()
    {
    
    }
    

    Model

    PCModel.h

    
    #ifndef PCMODEL_H
    #define PCMODEL_H
    
    #include <QAbstractItemModel>
    
    
    
    class PCItem;
    
    /**
     * 
     */
    class PCModel : public QAbstractItemModel
    {
        Q_OBJECT
    public:
        PCModel(QObject* parent = 0);
        ~PCModel();
    
        PCItem* get_item();
    
        void clear_all_info();
    
        void refresh_table();
    
    
    public:
        QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
    
        QModelIndex parent(const QModelIndex& child) const;
    
        QModelIndex index(int row, int column = 0, const QModelIndex &parent = QModelIndex()) const;
    
        int rowCount(const QModelIndex& parent = QModelIndex()) const;
        int columnCount(const QModelIndex& parent = QModelIndex()) const;
        bool hasChildren(const QModelIndex &parent = QModelIndex()) const;//
    
        QVariant data(const QModelIndex& idx, int role = Qt::DisplayRole) const;
    
        Qt::ItemFlags flags(const QModelIndex& idx) const;
    
        // when QCheckBox need(reference)
        //bool setData(const QModelIndex& idx, const QVariant& value, int role = Qt::EditRole);
    
    
    
    
    private:
        PCItem* d_item_root;
    
    
    
    };
    
    #endif // PCMODEL_H
    
    

    PCModel.cpp

    #include "PCModel.h"
    #include "PCItem.h"
    #include "enum/GlobalAction.h"
    #include "validvalue/FileUtil.h"
    
    #include <QMessageBox>
    #include <QFileInfo>
    #include <QApplication>
    
    #include <QStyle>
    #include <QDebug>
    
    
    using namespace GlobalAction;
    
    
    
    
    PCModel::PCModel(QObject* parent)
        : QAbstractItemModel(parent),
          d_item_root(new PCItem())
    {
    }
    
    
    
    PCModel::~PCModel()
    {
        //qDebug() << __FILE__ << __LINE__ << " ~PCModel ";
    
        if( d_item_root )
        {
            d_item_root->deleteLater();
            d_item_root = 0;
        }
    }
    
    
    
    PCItem*
    PCModel::get_item()
    {
        return d_item_root;
    }
    
    
    
    void
    PCModel::clear_all_info()
    {
        beginResetModel();
        d_item_root->clear();
        endResetModel();
    }
    
    
    void
    PCModel::refresh_table()
    {
        beginResetModel();
    
        endResetModel();
    }
    
    
    
    QVariant
    PCModel::headerData(int section, Qt::Orientation orientation, int role) const
    {
        Q_UNUSED(orientation);
        if( role == Qt::DisplayRole )
        {
            switch(section){
            case 0:
                return tr("你的头部标题名称");
            default:
                break;
            }
        }
        return QVariant();
    }
    
    
    
    int
    PCModel::rowCount(const QModelIndex& parent) const
    {
        if( parent.isValid() )
        {
            PCItem* item = (PCItem*)parent.internalPointer();
            //qDebug() << __FILE__ << __LINE__ << " rowCount  isValid " << item->d_children.size();
            return item->d_children.size();
        }
        else
        {
            return d_item_root->d_children.size();
        }
    
        return 0;
    }
    
    
    
    int
    PCModel::columnCount(const QModelIndex& parent) const
    {
        Q_UNUSED(parent);
        return 1;
    }
    
    
    
    QModelIndex
    PCModel::parent(const QModelIndex& child) const
    {
        if( !child.isValid() || !child.internalPointer() )
        {
            return QModelIndex();
        }
    
        PCItem* item = (PCItem*)child.internalPointer();
    
        //qDebug() << __FILE__ << __LINE__ << " item = " << item;
        PCItem* item_parent = item->d_parent;
        if( item_parent )
        {
            PCItem* item_parent_p = item_parent->d_parent;
            if( item_parent_p )
            {
                //const int& idx = item_parent_p->d_children.indexOf(item_parent);
                const int& idx = item_parent_p->get_index(item_parent);
                if( -1 != idx )
                {
                    return createIndex(idx, 0, item_parent);
                }
            }
        }
    
        return QModelIndex();
    }
    
    
    
    QModelIndex
    PCModel::index(int row, int column, const QModelIndex& parent) const
    {
        if( parent.isValid() )
        {
            PCItem* item = (PCItem*)parent.internalPointer();
            //qDebug() << __FILE__ << __LINE__ << " row = " << row;
            if( row > -1 && row < item->d_children.size() )
            {
                if( item->d_children.at(row)->d_is_show_name )
                {
                    return createIndex(row, column, item->d_children.at(row));
                }
            }
        }
        else
        {
            if( row > -1 && row < d_item_root->d_children.size() )
            {
                return createIndex(row, column, d_item_root->d_children.at(row));
            }
        }
    
        return QModelIndex();
    }
    
    
    
    bool
    PCModel::hasChildren(const QModelIndex& idx) const
    {
        if( !idx.isValid() )
        {
            return true;
        }
    
        //qDebug() << __FILE__ << __LINE__ << " idx = " << idx;
        PCItem* item = (PCItem*)idx.internalPointer();
        if( item && item->d_children.size() > 0 )
        {
            return true;
        }
    
        return false;
    }
    
    
    
    Qt::ItemFlags
    PCModel::flags(const QModelIndex& idx) const
    {
        return QAbstractItemModel::flags(idx);
    }
    
    
    
    QVariant
    PCModel::data(const QModelIndex& idx, int role) const
    {
        if( !idx.isValid() )
        {
            return QVariant();
        }
    
        PCItem* item = (PCItem*)idx.internalPointer();
    
        if( role == Qt::DecorationRole )
        {
    		// 图标
            //qApp->style()->standardIcon()
            return QIcon(FileUtil::get_icon_name_from_name(item->d_name));
        }
    
        if( role == Qt::DisplayRole || role == Qt::EditRole )
        {
            switch( idx.column() ) {
            case 0:
            {
                 return item->d_name;
                
            }
            default:
                qWarning("data: invalid display value column %d", idx.column());
                return QVariant();
            }
        }
    
        if( role == Qt::UserRole )
        {
            //qDebug() << __FILE__ << __LINE__ << " UserRole";
            //return "UserRole";
        }
    
        return QVariant();
    }
    
    
    
    //bool
    //PCModel::setData(const QModelIndex& idx, const QVariant& value, int role)
    //{
    //    if( !idx.isValid() )
    //    {
    //        return false;
    //    }
    
    //    if( role == Qt::UserRole )
    //    {
    // TODO
    
    //        emit dataChanged(idx, idx); // to refresh QCheckBox
    //        return true;
    //    }
    
    //    return false;
    //}
    
    
    
    展开全文
  • qtreeview

    2011-12-21 22:32:12
    http://devbean.blog.51cto.com/448512/268468
    展开全文
  • QTreeView.rar

    2021-02-26 10:25:28
    Qtreeview实例
  • QTreeView宽度

    2020-07-24 15:08:11
    QTreeview的高度可以在重载的data函数中设置Qt::SizeHintRole的返回值,但宽度是由QHeaderView决定的,Qt::SizeHintRole的返回值不会影响QTreeView的宽度。 只能在QTreeView中调用setColumnWidth,或者可以重写...

    QTreeview的高度可以在重载的data函数中设置Qt::SizeHintRole的返回值,但宽度是由QHeaderView决定的,Qt::SizeHintRole的返回值不会影响QTreeView的宽度。

    展开全文
  • QTreeView应用

    2015-03-28 12:24:32
    QT中模型视图控制框架中QTreeView的应用代码,好包括QTableView的应用和代理的应用
  • QTreeView拖放

    热门讨论 2013-03-23 11:35:32
    本资源的代码是QT下的QTreeView的拖放功能(不同节点拖放)
  • QTreeView 使用

    2018-07-03 19:11:27
    QTreeView结构介绍:树控件的标题 QHeaderView,相关用法参考Qt文档。控件使用的model/view框架,QTreeView实现了QAbstractItemView 里声明的相关接口,由QAbstractItemModel为控件提供显示数据。自定义数据,通过...

    QTreeView

    结构介绍:

    树控件的标题 QHeaderView,相关用法参考Qt文档。

    控件使用的model/view框架,QTreeView实现了QAbstractItemView 里声明的相关接口,由QAbstractItemModel为控件提供显示数据。

    自定义数据

    1、继承自QAbstractItemModel,实现相关的模型。

    2、通过QStandardItemModel和QTreeView连用,用QStandardItem存储每个数据单元。

    常用属性:

    1、autoExpandDelay:int

    执行drag/drop操作时,控制树控件自动展开的延时时间。

    默认的设置为-1,此时意味着响应拖拽功能时,自动展开无效。

    2、heardHidden:bool

    表头是否显示。

    3、indentation:int

    树控件中每一项的缩进,默认为20。

    4、itemsExpandable:bool

    树控件是否能展开或收缩。

    5、rootIsDecorated:bool

    树控件的顶层项用以表示展开和收缩的小控件是否显示。如果只有一个层级的树结构,可以设置该属性为false,让

    他看起来更像简单的list结构。

    6、sortingEnabled:bool

    是否可以排序。默认为false;

    当执行排序前,必须保证items全部插入到tree中。这样可以避免错误。

    7、uniformRowHeights:bool

    每一项是否有相同的高度。默认为false。这个高度通过第一个Item获得,只有当该item的数据改变,才会去更新。

    当有大量数据时,可以将该属性设为true,以保证控件更快的效率。

    8、wordWrap:bool

    每一项文字在遇到换行符时候是否换行。默认为false。

    注意:即使设置该属性为true,也不能保证文字在过长的时候被完全显示,都会出现省略号。

    常用接口:

    1、折叠操作(collapse)

    2、展开操作(expand)

    3、根据像素坐标X,定位列

    4、重新绘制操作(draw)

    5、排序(sort)








    展开全文
  • QTreeView 使用Expand展开指定位置节点
  • 自定义 QTreeView

    千次阅读 2017-05-27 17:45:24
    自定义 QTreeView 交替行的背景色可以使用下面样式代码来定义: QTreeView { alternate-background-color: yellow; }123123 当鼠标划过 item 时,如果要提供一个特殊的背景色,可以使用 ::item 辅助控制,例如...
  • QTreeView用法详解

    2015-08-17 13:09:53
    介绍了QTreeView的用法以及模型-视图的相关操作
  • QTreeView使用总结

    2020-04-12 12:57:00
    setEditTriggers(QTreeView::NoEditTriggers); //节点不能编辑 treeView->setSelectionBehavior(QTreeView::SelectRows); //一次选中整行 treeView->setSelectionMode(QTreeView::SingleSele...
  • PyQt5 QTreeView

    2020-11-02 20:43:57
    import sys from PyQt5.QtWidgets import * from PyQt5.QtGui import * if __name__ == '__main__': ... #创建一个QTreeView的控件 tree=QTreeView() #为控件添加模式 tree.setModel(model) tr
  • QTreeview的使用

    千次阅读 2018-07-26 17:33:50
      目录: Qt树形控件QTreeView使用1——节点的操作 Qt树形控件QTreeView使用2——复选框的设置 ...QTreeView 和 QStandardItemModel的使用 ...QtreeView是ui中最常用的控件,Qt中QTreeWidget比QTree...
  • QTreeView简单例子

    热门讨论 2013-02-05 15:33:32
    QTreeView使用方法的例子,可以在Qt Creator中运行。
  • 自定义QTreeView

    千次阅读 2014-12-24 15:21:26
    Qt之QTreeView(一)   (2014-12-23 16:51:33) 转载▼ 标签:  qt   qtreeview   qtableview   qabstractitemmodel 分类: Qt  之前有讲解过QTableView的...
  • 此例子通过自定义Treemodel和treeitem实现了Qtreeview的节点可以拖动到另一节点下,可以用来实现数据分组等操作。
  • QTreeView和QFileSystemModel的DEMO
  • 自定义QTreeView(详解)

    千次下载 热门讨论 2014-12-23 18:40:01
    详细介绍QTreeView的使用, 包括:模型/视图,自定义委托、自定义样式等操作 以及无边框界面的拖拽等操作!
  • QAbstractItemModel+qtreeview

    2021-04-14 10:59:15
    QAbstractItemModel+qtreeview 前言 这里是我比较会详细讲的东西,我觉得学到了挺多知识,通过这一篇基本也可以说是熟练掌握了qt model view的体系。其实这时候也可以想一想mvc或是什么其他的,反正还有个核心思想...
  • 自定义的QTreeView+Model实现树节点内部之间拖拽效果,同时实现通过点击按钮的方式向QTreeView中添加节点。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,222
精华内容 488
热门标签
关键字:

qtreeview