Assigning Icons to items in QTreeView
我有一个从QTreeView继承的类。我需要将图标分配给不同类型的文件和目录。这个问题提供了以下解决方案:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | QVariant MyQFileSystemModel::data( const QModelIndex& index, int role ) const { if( role == Qt::DecorationRole ) { QFileInfo info = MyQFileSystemModel::fileInfo(index); if(info.isFile()) { if(info.suffix() =="dat") return QPixmap(":/icons/File_Icon.png");//I pick the icon depending on the extension else if(info.suffix() =="mcr") return QPixmap(":/icons/Region_Icon.png"); } } return QFileSystemModel::data(index, role); } |
我的类不是从QFileSystemModel继承而是将其组合进来,这意味着我不能覆盖函数
从上面看,图标将如何显示?是通过在构造函数中调用data()来实现的吗?
您需要使用根节点将模型添加到树中:
1 2 3 | QStandardItemModel* model = new QStandardItemModel; QStandardItem * rootNode = model->invisibleRootItem(); this->setModel(model); //Your class inherts from QTreeView |
,然后添加带有图标的项目:
1 2 3 | QStandardItem* item = new QStandardItem("myItem") item->setIcon(QIcon("icon.jpg")); rootNode->appendRow(item); |
您可能会有类似这样的内容:http://hpics.li/e9dc5dd
我想补充一点,如果在自定义模型的子类
有点像:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | QVariant SnapshotTreeModel::data(const QModelIndex &index, int role) const { if (!index.isValid()) return QVariant(); if (role == Qt::DisplayRole){ .... return item->text(); }else if (role == Qt::DecorationRole){ QStandardItem *item = static_cast<QStandardItem *>(index.internalPointer()); return item->icon(); } return QVariant(); } |