[Interest] Whole edit window closes.
william.crocker at analog.com
william.crocker at analog.com
Thu Mar 14 11:50:42 CET 2019
>>
>> 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);
}
};
More information about the Interest
mailing list