Qt :: BackgroundRole似乎被忽略了

问题描述 投票:3回答:2

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

我已经覆盖了headerData(),我可以通过返回Qt::ForegroundRole上的颜色来更改单个行标题(或列标题,但我在这里所有关于行)的字体颜色

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

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

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

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

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

c++ qt qtableview
2个回答
3
投票

AFAIK的角色颜色相当于设置调色板颜色,绘制标题单元格的QStyle可以自由忽略它。

我在使用QPalette或样式表在小部件上设置任意颜色时遇到了麻烦。文本往往起作用,“窗口”彩色背景(例如QPushButton背景),但文本输入字段背景不起作用(例如QLineEdit)。但AFAIK归结为特定的QStyle实现,因此不仅在小部件之间,而且在不同平台之间也会有所不同。唯一确定你想要的东西的方法是重新实现QStyle(一项大工作),或者在paintEvent(..)中手动绘制它(很难跟随当前的QStyle和仍然有很多代码)。


0
投票

1)您也可以通过使用自己的项目委托来实现它 - 从QStyledItemDelegate或其他任何东西继承,重新实现一个方法并将其设置为查看。

2)对于特定的表或标题视图,使用尊重画笔的样式:

//auto keys = QStyleFactory::keys();
if(auto style = QStyleFactory::create("Fusion")) {
    verticalHeader()->setStyle(style);
}
© www.soinside.com 2019 - 2024. All rights reserved.