使用现有样式表元素的值作为另一个样式表元素的值

时间:2012-12-13 15:29:07

标签: qt styling

我正在尝试在QTreeView上设置样式表,使得所选项目具有相同的颜色,无论视图是否具有焦点。我正在使用

QTreeView::item:selected:!active { 
    background: myColour; 
}

我不想将硬编码的值传递到我的样式表中,而是想使用QTreeView::item:selected:active的值,这样我就可以始终正确设置颜色。

我快速去了
QTreeView::item:selected:!active { 
    background: QTreeView::item:selected:active; 
}

只是看看发生了什么,这没什么。如何提取QTreeView::item:selected:active的值并在样式表中使用它?

1 个答案:

答案 0 :(得分:0)

我会从Palette中读取活动颜色组的背景颜色,并将其应用到widget的调色板中。

QWidget::palette()

QPalette

QPalette::color()

QPalette::ColorRole

QPalette::ColorGroup

因此,在为QTreeViewItem应用/打磨样式表之后,这就是代码的样子。

QPalette modifiedPalette(this->palette());
QColor activeBgColor(this->palette().color(QPalette::Active, QPalette::Window));
modifiedPalette.setColor(QPalette::Window, activeBgColor);

this->setPalette(modifiedPalette);

希望有所帮助。


您还可以探索的其他两个选项包括:

使用动态属性,或者基本上将您控制的某些属性绑定到样式。我最近发了一篇帖子向某人解释:

QList: Out of memory

或者您可以使用某种正则表达式解析QString返回的stylesheet()中的信息,并将其存储在某处,但如果该窗口小部件的样式表不存在,则可能会出现问题拥有它,它引用了父级的样式表。您也可以考虑使用QWidget的style属性。

QWidget::styleSheet()