I have a QTableView.
I use a QStyledItemDelegate on each cell.
The delegate opens a custom, modal editor on double click.
The editor is based on a QDialog and contains a number of widgets,
one of which is a QComboBox.
When I press <Return> in the text entry area of the QComboBox,
the whole edit window closes, but I am not done "editing". Arg.



Hi,
I had this kind of issue back in the Qt 4.8 days

From what I remember, the issue is that the QComboBox does not consume
the "return pressed" event.
So the event propagates to the QDialog which handles the event by
"pressing" the default button and closing itself.
The only solution I found was to filter the "return pressed" event,
using an event filter (`QObject::installEventFilter()`)
so that it does not reach the QDialog.


Thanks.

That was it.
The following code worked for me.
( In defense of Qt, I am still using 5.7 )

Bill

----------------

class ComboEventFilter : public QObject {
    Q_OBJECT
    typedef QObject BaseClass;
  public:
    ComboEventFilter( QComboBox *cp ) : BaseClass(cp), boxp(cp) { }
  protected:
    bool eventFilter( QObject *op, QEvent *ep ) {
        if( ep->type() == QEvent::KeyPress ) {
            QKeyEvent *kep = static_cast<QKeyEvent*>(ep);
            if( kep->key() == Qt::Key_Enter || kep->key() == Qt::Key_Return ) {
                boxp->lineEdit()->returnPressed();
                // Stop propagation of event. Was reaching the top level dialog
                // and pressing the default button and closing it.
                return true;
            } else {
                return QObject::eventFilter(op,ep);
            }
        } else {
            return QObject::eventFilter(op,ep);
        }
    }
    QComboBox *boxp;
};

class MyComboBox2 : public QComboBox {
    Q_OBJECT
    typedef QComboBox BaseClass;
  public:
    MyComboBox2() {
        ComboEventFilter *efp = new ComboEventFilter(this);
        installEventFilter(efp);
    }
};
_______________________________________________
Interest mailing list
Interest@qt-project.org
https://lists.qt-project.org/listinfo/interest

Reply via email to