C++ Qt设置选定QTableWidgetItems的背景色

C++ Qt设置选定QTableWidgetItems的背景色,c++,qt,C++,Qt,我一直在尝试在我的QTableWidget中选择所选单元格的背景色。我使用一个定制的QTableWidgetItem,它具有以下data方法: QVariant MyItem::data(int角色)const { if(role==Qt::BackgroundRole) { if(isSelected()) 返回QBrush(Qt::绿色); 其他的 返回QBrush(Qt::蓝色); } } 但是,它并没有像预期的那样工作: 现在我真的不知道该怎么办。。。请建议 注意:对于简单的情况,我

我一直在尝试在我的
QTableWidget
中选择所选单元格的背景色。我使用一个定制的
QTableWidgetItem
,它具有以下
data
方法:

QVariant MyItem::data(int角色)const
{
if(role==Qt::BackgroundRole)
{
if(isSelected())
返回QBrush(Qt::绿色);
其他的
返回QBrush(Qt::蓝色);
}
}
但是,它并没有像预期的那样工作:

现在我真的不知道该怎么办。。。请建议


注意:对于简单的情况,我可以编辑我的QS以添加项目的背景色,但我想在
数据中添加一个条件,使用QS将不那么容易。

您也需要重新实现项目委派

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);
}
class ColoredItemDelegate:public QStyledItemDelegate
{
Q_对象
公众:
显式ColoredItemDelegate(QObject*parent=0);
QWidget*createEditor(QWidget*父项、常量QStyleOptionViewItem和option、常量QModelIndex和索引)常量;
void setEditorData(QWidget*编辑器,常量QModelIndex和index)常量;
void setModelData(QWidget*编辑器、QBStractItemModel*模型、常量QModelIndex和索引)常量;
void updateEditorGeometry(QWidget*编辑器,常量QStyleOptionViewItem&option,常量QModelIndex&index)常量;
无效油漆(QPainter*油漆工、常量QStyleOptionViewItem和option、常量QModelIndex和索引)常量;
};
void ColoredItemDelegate::paint(QPaint*油漆工,常量QStyleOption视图项和选项,
常数QModelIndex和索引)常数
{
if(option.state.testFlag(QStyle::state_Selected))
{
QStyleOptionViewItem新选项(选项);
newOption.palete.setBrush(Qpalete::Normal,Qpalete::Highlight,
index.data(Qt::BackgroundRole.value());
QStyledItemDelegate::paint(画师、新选项、索引);
返回;
}
QStyledItemDelegate::paint(油漆工、选项、索引);
}

谢谢,这正是我想要的!