gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 07:04:00 24 4
gpt4 key购买 nike

我正在使用 QTableWidget 来显示多行。其中一些行应该反射(reflect)错误,并且它们的文本颜色已更改:

反射(reflect)没有错误的行以默认颜色显示(在我的计算机上白底黑字)。
反射(reflect)存在错误的行以红色文本颜色显示(在我的计算机上是白底红色文本)。

只要没有选择就可以了。一旦选择了一行,无论未选择的文本颜色如何,文本颜色都将始终变为蓝色背景上的白色(在我的计算机上)。

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

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

最佳答案

回答我自己,这就是我最终所做的:委托(delegate)。

该委托(delegate)将检查该项目的前景色角色。如果该前景色不是调色板的默认 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<QColor>();
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));

关于qt - 在 QTableWidget 中,更改所选行的文本颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/286565/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com