Я пытался выбрать цвета фона выбранных ячеек в моем 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 будет не таким простым.
Вам также необходимо переопределить делегат элемента.
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);
}
Спасибо, это именно то, что я искал!