当前位置:  开发笔记 > 开发工具 > 正文

在QTableWidget中,更改所选行的文本颜色

如何解决《在QTableWidget中,更改所选行的文本颜色》经验,为你挑选了1个好方法。

我正在使用QTableWidget来显示多行.其中一些行应反映错误并更改其文本颜色:

显示没有错误的行以默认颜色显示(我的计算机上的白色背景上的黑色文本).
反映出有错误的行以红色文本颜色显示(在我的计算机上的白色背景上是红色文本).

只要没有选择,这一切都很好.选择行后,无论未选择的文本颜色如何,文本颜色在蓝色背景上始终为白色(在我的计算机上).

这是我想要更改以获得以下内容:
当选择行时,如果行反映没有错误,我希望它在蓝色背景上显示白色文本(默认行为).
如果该行反映错误并被选中,我希望它在蓝色背景上以红色文字显示.

到目前为止,我只能改变整个QTableWidget的选择颜色,这不是我想要的!



1> Jérôme..:

回答我自己,这就是我最终做的事情:代表.

该代表将检查项目的前景色角色.如果此前景色不是调色板的默认WindowText颜色,则表示设置了特定颜色,并且此特定颜色用于突出显示的文本颜色.

我不确定这是否非常强大,但至少它在Windows上运行良好.

class MyItemDelegate: public QItemDelegate
{
public:
  MyItemDelegate(QObject* pParent = 0) : QItemDelegate(pParent)
  {
  }

  void paint(QPainter* pPainter, const QStyleOptionViewItem& rOption, const QModelIndex& rIndex) const  
  {
    QStyleOptionViewItem ViewOption(rOption);

    QColor ItemForegroundColor = rIndex.data(Qt::ForegroundRole).value();
    if (ItemForegroundColor.isValid())
    {
      if (ItemForegroundColor != rOption.palette.color(QPalette::WindowText))
      {
        ViewOption.palette.setColor(QPalette::HighlightedText, ItemForegroundColor);
      }
    }
    QItemDelegate::paint(pPainter, ViewOption, rIndex);
 }
};

以下是如何使用它:

QTableWidget* pTable = new QTableWidget(...);
pTable->setItemDelegate(new MyItemDelegate(this));

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有