QTreeView,每个级别的样式不同

Posted

技术标签:

【中文标题】QTreeView,每个级别的样式不同【英文标题】:QTreeView, style each level differently 【发布时间】:2016-07-19 11:54:53 【问题描述】:

我的问题与this question 非常相似。

我有一个连接到模型的 QTreeView。是否可以以不同的方式设置树的每个级别?我需要更改每行的背景颜色。不同的层次会有不同的背景。展开的项目也会有不同的颜色。

我已经尝试过这个http://doc.qt.io/qt-4.8/stylesheet-examples.html#customizing-qtreeview 似乎只使用 css 是不可能的。 QProxyStyle 可以帮忙吗?怎么用?

谢谢你,马丁。

【问题讨论】:

【参考方案1】:

如果您使用自定义模型(派生自 QAbstractItemModel 或类似模型),则可以通过在请求任何 appearance role 的数据时从 QAbstractItemModel::data() 返回适当的值来实现此目的:

QVariant MyModel::data(const QModelIndex& index, int role) const

    switch(role)
    
        case Qt::DisplayRole:
        
            ...
            break;
        
        case Qt::BackgroundRole:
            return QColor(Qt::red);
        case ...
    

    return QVariant();

使用QStandardModel,您可以使用QStandardItem::setData() 为这些角色设置数据。

【讨论】:

以上是关于QTreeView,每个级别的样式不同的主要内容,如果未能解决你的问题,请参考以下文章

在 PySide 的 QTreeView 中更改时如何获取项目的先前名称

带有自定义项的 QTreeView

样式不适用于 QItemDelegate

如何从 QStyle 获取 QTreeView 的标识宽度

两个不同的 QTreeView 和一个共享的 QStandardItemModel

QTreeView setStyleSheet无效