gpt4 book ai didi

c++ - Qt 为选定的 QTableWidget 项设置背景颜色

转载 作者:行者123 更新时间:2023-11-30 04:47:13 26 4
gpt4 key购买 nike

我一直试图在我的 QTableWidget 中选择所选单元格的背景颜色。我使用具有以下 data 方法的自定义 QTableWidgetItem:

QVariant MyItem::data(int role) const
{
if (role == Qt::BackgroundRole)
{
if (isSelected())
return QBrush(Qt::green);
else
return QBrush(Qt::blue);
}
}

但是,它并没有像预期的那样工作:

screenshot of my qtablewidget

我现在真的不知道该怎么做...请建议!

注意:对于简单的情况,我可以编辑我的 QSS 以添加项目的背景颜色,但我想在 data 中为流程添加条件并使用QSS 不会那么容易。

最佳答案

您也需要重新实现项目委托(delegate)。

class ColoredItemDelegate : public QStyledItemDelegate
{
Q_OBJECT
public:
explicit ColoredItemDelegate(QObject *parent = 0);

QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const;
void setEditorData(QWidget *editor, const QModelIndex &index) const;
void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const;
void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const;
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;

};

void ColoredItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
const QModelIndex &index) const
{
if (option.state.testFlag(QStyle::State_Selected))
{
QStyleOptionViewItem newOption(option);
newOption.palette.setBrush(QPalette::Normal, QPalette::Highlight,
index.data(Qt::BackgroundRole).value<QBrush>());
QStyledItemDelegate::paint(painter, newOption, index);
return;
}

QStyledItemDelegate::paint(painter, option, index);
}

关于c++ - Qt 为选定的 QTableWidget 项设置背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56328348/

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