QT - QTreeView具有不同颜色的QTreeView项目的子组

时间:2013-11-27 15:54:19

标签: c++ qt

有人知道如何为QTreeView项的子组实现/实现具有不同颜色的QTreeView吗? 类似的东西:

1

有没有人做过类似的事情,可以给我一个教程的链接或如何,或者示例代码也会很好。目前我完全不知道如何构建它。

我正在使用Qt 5.1.1并将QTreeViewQFileSystemModelQItemSelectionModel一起使用。

我也想到了:
m_TreeView->setStyleSheet(...)
但这仅为整个treeView设置样式,或仅为选定的样式设置样式。

有什么建议吗?非常感谢你的帮助!

1 个答案:

答案 0 :(得分:4)

Qt::BackgroundRole可用于返回视图用来绘制索引的QColor'背景

当您使用现有项目模型类(QFileSystemModel)时,最简单的方法是将代理模型置于文件系统模型之上,只进行着色。

使用QIdentityProxyModel

class ColorizeProxyModel : public QIdentityProxyModel {
    Q_OBJECT
public:
    explicit ColorizeProxyModel(QObject *parent = 0) : QIdentityProxyModel(parent) {}

    QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const {
        if (role != Qt::BackgroundRole) 
            return QIdentityProxyModel::data(index, role);

        ... find out color for index 
        return color;
    }
};

使用它:

QFileSystemModel *fsModel = new QFileSystemModel(this);
ColorizeProxyModel *colorProxy = new ColorizeProxyModel(this);
colorProxy->setSourceModel(fsModel);
treeView->setModel(colorProxy);

如果你需要更多花哨的东西(比如特殊形状等),你需要自己的项目委托与自定义绘画(见QStyledItemDelegate)。