Hi Matthew, I have this in a delegate and it seems to work well. I don't know about "best way." This one intercepts the double-click event which would typically open an editor. It could also work with a single click if you prefer (I personally found that annoying from a user perspective). This particular delegate also re-implements the paint() method (to show a color swatch) and a sizeHint(), but I don't see how that would matter. Otherwise this is the only other method in it.
bool ColorDelegate::editorEvent(QEvent *e, QAbstractItemModel *mdl, const QStyleOptionViewItem &opt, const QModelIndex &idx) { if (e->type() == QEvent::MouseButtonDblClick && idx.data().canConvert<QColor>()) { if ((idx.flags() & Qt::ItemIsEditable) && static_cast<QMouseEvent*>(e)->button() == Qt::LeftButton) { QColorDialog *dlg = new QColorDialog(const_cast<QWidget*>(opt.widget)); dlg->setColor(idx.data().value<QColor>()); dlg->setModal(true); dlg->setAttribute(Qt::WA_DeleteOnClose); connect(dlg, &QColorDialog::colorSelected, this, [mdl, idx](const QColor &c) { mdl->setData(idx, QVariant::fromValue(c)); }); dlg->show(); } return true; } return QStyledItemDelegate::editorEvent(e, mdl, opt, idx); } HTH, -Max On 11/12/2019 3:45 PM, Matthew Woehlke wrote:
I have a QTreeView. For one of the columns, rather than editing the data in-place, I want to pop up a QTextEdit. (For now, I'm hoping I'll be able to use QInputDialog, but I may end up needing to roll my own.) Is it reasonable to execute the dialog (QDialog::exec()) in an override of QAbstractItemDelegate::createEditor, or do I need to hook itemActivated or some such? (Maybe QAbstractItemDelegate::editorEvent would be better?) What is the best way to trigger the editor?
_______________________________________________ Interest mailing list Interest@qt-project.org https://lists.qt-project.org/listinfo/interest