QStyledItemDelegate with paint() and rowColor from Qt::BackgroundColorRole
-
Hello,
I have a QStyledItemDelegate with the following implementation of paint()void MyDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { .... here the editor is generated and so on .... .... // now the painting part begins QStyleOptionViewItem option_widget = option; QStyledItemDelegate::initStyleOption(&option_widget, index); // where to set the color??? QColor background = index.model()->data(index, Qt::BackgroundColorRole).value<QColor>(); // this is needed so the selection is painted correctly, otherwise the row-selection is not visible QStyleOptionViewItem option_widget_backgrund = option; QStyledItemDelegate::paint(painter, option_widget_backgrund, QModelIndex()); // start drawing ------------------------------------------------------------ painter->save(); editor->setPalette(option_widget.palette); editor->resize(option_widget.rect.size()); painter->translate(option_widget.rect.topLeft()); editor->render(painter, QPoint(), QRegion(), QWidget::DrawChildren); painter->restore(); }
What I am doing here is first call QStyledItemDelegate::paint(painter, option_widget_backgrund, QModelIndex()); with an invalid index to paint the selection background.
This works but is it really the correct way to paint the selection coloring??Now besides the selection coloring I want to colour the background of some rows as specified by Qt::BackgroundColorRole in the model.
Where do I set this color? -
QModelIndex has a data() function: https://doc.qt.io/qt-5/qmodelindex.html#data
-
@Christian-Ehrlicher: but what do I do with the color data? My problem is that I do not know where to set it.
-
Setting data in the model can be done with QAbstractItemModel::setData()
-
Maybe I have not explained clearly what my problem is.
I already have all the data in the model and I also have implemented the setData() and data() functions and so on.
However now I want to have an QStyledItemDelegate in my View that has a custom paint() function.From the model I get the background color for each item with data(index, Qt::BackgroundColorRole)
When I do not use delegates it also paints the color correctly.
I just do not know how to use the color for the background in my custom paint() function.