Как сделать такое:
В столбце таблицы ячейки закрашены заданными цветами
Пользователь щёлкает по ячейке таблицы, вылезает QColorDialog, ячейка красится в выбранный цвет
Строго QTableView, а не QTableWidget.
Пишу делегата. После задания цвета мелькает нужный цвет и ячейка становится белой. При выборе другой ячейки предыдущая красится в выбранный цвет. Что не правильно?
C++ (Qt)
		class ColorDelegate : public QItemDelegate
		 {
			 Q_OBJECT
 
		 public:
			 ColorDelegate(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;
		 };
C++ (Qt)
QWidget *ColorDelegate::createEditor(QWidget *parent,
    const QStyleOptionViewItem &/* option */,
    const QModelIndex & index ) const
{
	QWidget* editor = new QWidget(parent);
	QHBoxLayout* ly = new QHBoxLayout(editor);
	editor->setAutoFillBackground(true);
	QVariant value = index.model()->data(index, Qt::UserRole + 1);
	QColor c = value.value<QColor>();
	c = QColorDialog::getColor(c, 0, tr("Выбор цвета"), QColorDialog::ShowAlphaChannel);
	QVariant newValue(c);
	QAbstractItemModel* model = const_cast<QAbstractItemModel*>(index.model());
	model->setData(index, newValue, Qt::UserRole + 1);
	editor->setPalette(QPalette(c));
	qApp->processEvents();
 
	return editor;
}
 
void ColorDelegate::setEditorData(QWidget *editor,
                                    const QModelIndex &index) const
{
}
 
void ColorDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
                                const QModelIndex &index) const
{
}
 
void ColorDelegate::updateEditorGeometry(QWidget *editor,
    const QStyleOptionViewItem &option, const QModelIndex &/* index */) const
{
    editor->setGeometry(option.rect);
}
 
void ColorDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
                          const QModelIndex &index) const
{
	QVariant value = index.model()->data(index, Qt::UserRole + 1);
	QColor c = value.value<QColor>();
	painter->fillRect(option.rect, c);
}