有人知道如何为QTreeView项目的子组实现/实现不同颜色的QTreeView吗?
就像是:

是否有人做过类似的事情并且可以给我链接到教程或如何做的链接,或者示例代码也不错。目前,我完全不知道如何构建它。

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

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

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

最佳答案

有一个Qt::BackgroundRole,可以用来返回一个QColor,以供 View 绘制索引的背景。

当您使用现有的项目模型类(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);

如果您需要更多精美的东西(例如特殊形状等),则需要自己的带有自定义绘画的项目委托(delegate)(请参见QStyledItemDelegate)。

关于c++ - QT-QTreeView项目的子组具有不同颜色的QTreeView,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20247065/

10-11 03:57