我正在使用从QAbstractTableModel
派生的自定义表模型。
我已经覆盖了headerData()
,我可以通过返回Qt::ForegroundRole
上的颜色来更改单个行标题(或列标题,但我在这里所有关于行)的字体颜色
if(role == Qt::ForegroundRole)
return Qt::green;
但是,如果我去Qt::BackgroundRole
设置标题单元格的背景颜色,没有任何反应。
if(role == Qt::BackgroundRole)
return Qt::red;
我在return
上设置了一个断点,它已达到。但没有任何反应:-(
关于我错在哪里的任何想法?
AFAIK的角色颜色相当于设置调色板颜色,绘制标题单元格的QStyle
可以自由忽略它。
我在使用QPalette
或样式表在小部件上设置任意颜色时遇到了麻烦。文本往往起作用,“窗口”彩色背景(例如QPushButton
背景),但文本输入字段背景不起作用(例如QLineEdit
)。但AFAIK归结为特定的QStyle
实现,因此不仅在小部件之间,而且在不同平台之间也会有所不同。唯一确定你想要的东西的方法是重新实现QStyle
(一项大工作),或者在paintEvent(..)
中手动绘制它(很难跟随当前的QStyle
和仍然有很多代码)。
1)您也可以通过使用自己的项目委托来实现它 - 从QStyledItemDelegate或其他任何东西继承,重新实现一个方法并将其设置为查看。
2)对于特定的表或标题视图,使用尊重画笔的样式:
//auto keys = QStyleFactory::keys();
if(auto style = QStyleFactory::create("Fusion")) {
verticalHeader()->setStyle(style);
}