QAbstractListModel 和 Qt 样式表

QAbstractListModel and Qt stylesheets

本文关键字:样式 Qt QAbstractListModel      更新时间:2023-10-16

我通过继承QAbstractListModel创建了一个列表视图模型。我实现了data(const QModelIndex &, int )来提供列表项背景颜色(Qt::BackgroundRole)和项文本颜色(Qt::ForegroundRole)。

当我在没有样式表的情况下运行我的应用程序时,它可以工作,但是一旦我应用样式表(使用QApplication::setStyleSheet),文本颜色就会出错。文本颜色保持样式表中设置的颜色。

我通过模型进行了调试,即使它返回,例如QBrush(QColor(255, 0, 0)),在 ForegroundRole 上,它永远不会应用于列表视图。

在为应用程序设置样式表时,我是否需要做一些额外的事情才能使列表视图模型正常工作?

正确答案(来自king_nak的答案)[https://stackoverflow.com/a/41673494/1151329]:

我在原始 QListView 块之后的样式表(.qss 文件)中添加了以下内容

QListView[default_style="true"]
{
color : default;
}

在我的代码中,我随后调用

ui.listView->setProperty("default_style", QVariant(true));

它适用于样式表样式表样式的任何其他 QListView,但这个带有"default_style"属性的 QListView 使用小部件设置的调色板。

您希望重置特定列表小部件的样式表的文本颜色。为此,您可以在该小部件的单独选择器中将样式表扩展到用户default

例如:

QListView {
/* Style common to all list views */
}
QListView#MySpecialList {
color: default;
/* Other adjustments */
}

在这种情况下,列表视图的对象名称必须MySpecialList。或者,您还可以添加动态属性并在样式表中对其进行测试:

QListView[specialList="true"] { /* ... */ }