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

Reply via email to