我正在使用从QAbstractTableModel
派生的自定义表格模型。
我已经覆盖headerData()
,我可以通过返回Qt::ForegroundRole
<上的颜色来更改各个行标题(或列标题,但我在这里都是关于行)的字体颜色/ p>
if(role == Qt::ForegroundRole)
return Qt::green;
但如果我去Qt::BackgroundRole
设置标题单元格的背景颜色,则没有任何反应。
if(role == Qt::BackgroundRole)
return Qt::red;
我在return
上设置了一个断点并且已达到。但没有任何反应: - (
关于我错在哪里的任何想法?
答案 0 :(得分:3)
AFAIK角色颜色相当于设置调色板颜色,QStyle
绘制标题单元格可以自由忽略它。
我无法使用QPalette
或样式表在小部件上设置任意颜色。文本倾向于起作用,“窗口”彩色背景(例如QPushButton
背景)也是如此,但文本输入字段背景不起作用(例如QLineEdit
)。但是AFAIK归结为特定的QStyle
实现,因此不仅会在小部件之间变化,而且会在不同平台之间变化。唯一某种方式可以完全按照您的要求获取内容,重新实现QStyle
(大作业),或者在paintEvent(..)
中手动绘制(难以遵循当前的QStyle
和仍有大量代码。
答案 1 :(得分:0)
1)您也可以使用自己的项目委托来实现它-从QStyledItemDelegate继承或其他任何东西,重新实现一个方法并将其设置为view。
2)对于特定的表或标题视图,请使用尊重笔刷的样式:
//auto keys = QStyleFactory::keys();
if(auto style = QStyleFactory::create("Fusion")) {
verticalHeader()->setStyle(style);
}