0

我已经子类化QTreeView并制作了模型的子类QAbstractTableModel,一切正常。如果代码(不是用户)在 QTreeView 中更改了某些内容,则该行的文本颜色变为红色。我已经Qt::TextColorRoledata()函数和返回实现了这个低谷检查Qt::red

但是,如果选择了该特定行,则文本颜色会自动变为黑色(背景颜色变为浅绿色,这是正常的)。取消选择该行后,一切正常。在调试模式下,我看到该函数为选定的行( )data()返回真值。Qt::red

现在我该如何解决这个问题,什么可能导致这种不正确的行为?

先感谢您!

4

2 回答 2

1

我通过委托找到了一种方法。这是代码

class TextColorDelegate: public QItemDelegate
{
public:
  explicit TextColorDelegate(QObject* parent = 0) : QItemDelegate(parent)
  { }

  void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const  
  {
    QStyleOptionViewItem ViewOption(option);

    QColor itemForegroundColor = index.data(Qt::ForegroundRole).value<QColor>();
    if (itemForegroundColor.isValid())
    {
      if (itemForegroundColor != option.palette.color(QPalette::WindowText))
        ViewOption.palette.setColor(QPalette::HighlightedText, itemForegroundColor);

    }
    QItemDelegate::paint(painter, ViewOption, index);
 }
};

对于使用委托,你应该写这样的东西

pTable->setItemDelegate(new TextColorDelegate(this));

其中pTable的类型是QTableView*

于 2013-10-18T14:30:36.663 回答
0

以下代码是否使您的文本颜色保持红色?

QPalette p = view->palette();
p.setColor(QPalette::HighlightedText, QColor(Qt::red));
view->setPalette(p);
于 2013-10-14T14:33:18.663 回答