【问题标题】:Qt::BackgroundRole seems to be ignoredQt::BackgroundRole 似乎被忽略了
【发布时间】:2012-12-12 10:12:04
【问题描述】:

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

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

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

但如果我使用Qt::BackgroundRole 设置标题单元格的背景颜色,则什么都不会发生。

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

我在return 上设置了一个断点并到达。但是什么也没发生:-(

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

【问题讨论】:

    标签: c++ qt qtableview


    【解决方案1】:

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

    我在使用QPalette 或样式表在小部件上设置任意颜色时遇到了麻烦。文本往往会起作用,就像“窗口”彩色背景(例如QPushButton 背景)一样,但文本输入字段背景却不行(例如QLineEdit)。但是 AFAIK 取决于特定的 QStyle 实现,因此不仅会因小部件而异,而且会因平台而异。唯一确定让事情完全按照你想要的方式是重新实现QStyle(一个工作),或者在paintEvent(..)中手动绘制它(很难遵循当前的QStyle,还有很多代码)。

    【讨论】:

    • 所以背景色不能这样设置? :-(
    【解决方案2】:

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

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

    //auto keys = QStyleFactory::keys();
    if(auto style = QStyleFactory::create("Fusion")) {
        verticalHeader()->setStyle(style);
    }
    

    【讨论】:

      猜你喜欢
      • 2021-10-28
      • 2016-09-30
      • 2012-03-11
      • 1970-01-01
      • 1970-01-01
      • 2017-12-05
      • 2012-03-08
      • 2015-12-11
      • 2014-04-15
      相关资源
      最近更新 更多