我一直在尝试选择QTableWidget
中所选单元格的背景颜色。我使用具有以下QTableWidgetItem
方法的自定义data
:
QVariant MyItem::data(int role) const
{
if (role == Qt::BackgroundRole)
{
if (isSelected())
return QBrush(Qt::green);
else
return QBrush(Qt::blue);
}
}
但是,它不能按预期工作:
我目前还不知道该怎么办...请提出建议!
注意:在简单的情况下,我可以编辑我的QSS以添加项目的背景色,但是我想在data
的流程中添加条件,并且使用QSS将不会那样容易。
答案 0 :(得分:1)
您还需要重新实现项目委托。
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);
}