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(油漆工、选项、索引);
}
谢谢,这正是我想要的!