Qt :: BackgroundRole似乎被忽略了

时间:2012-12-12 10:12:05

标签: c++ qt qtableview

我正在使用从QAbstractTableModel派生的自定义表格模型。

我已经覆盖headerData(),我可以通过返回Qt::ForegroundRole <上的颜色来更改各个行标题(或列标题,但我在这里都是关于行)的字体颜色/ p>

if(role == Qt::ForegroundRole)
   return Qt::green;

但如果我去Qt::BackgroundRole设置标题单元格的背景颜色,则没有任何反应。

if(role == Qt::BackgroundRole)
   return Qt::red;

我在return上设置了一个断点并且已达到。但没有任何反应: - (

关于我错在哪里的任何想法?

2 个答案:

答案 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);
}