Всем привет!
У меня установлена собствення фабрика редакторов. Сейчас имею такой метод рисования:
C++ (Qt)
void CommonDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const {
std::unique_ptr<QWidget> editor {QStyledItemDelegate::createEditor(nullptr, option, index)};
if (auto *comboBox = dynamic_cast<QComboBox *>(editor.get())) {
auto opt = option;
initStyleOption(&opt, index);
comboBox->setEnabled(index.flags() & Qt::ItemIsEditable);
QStyleOptionComboBox cmbOpt;
cmbOpt.initFrom(comboBox);
cmbOpt.rect = opt.rect;
cmbOpt.currentText = opt.text;
const auto decoration = index.model()->data(index, Qt::DecorationRole);
if (decoration.type() == QVariant::Icon) {
cmbOpt.currentIcon = decoration.value<QIcon>();
cmbOpt.iconSize = comboBox->iconSize();
}
QApplication::style()->drawComplexControl(QStyle::CC_ComboBox, &cmbOpt, painter);
QApplication::style()->drawControl(QStyle::CE_ComboBoxLabel, &cmbOpt, painter);
return;
}
return QStyledItemDelegate::paint(painter, option, index);
}
Комбо в таблицу выводится, но вот он какой-то не живой. Обычно виджет как-то реагирует на наведение мыши, на покидание мыши виджета. Интересно, как можно было бы достичь такого же эффекта не сильно много внося изменений в текущий код
Пока что видится решение - наследоваться от AbstractView и связывать события мыши с делегатом + использовать какие-то флаги рисования. Но может есть что-то попроще?
Я ещё рассматривал вариант QAbstractItemView::setIndexWidget, но кажется, что он достаточно геморойный для меня, т.к. для отображения используется 3 класса моделей: фильтрующая->модель-массив однотипных моделей->модель элемент массива