QDialogを開くイベントフィルターがインストールされたQMainWindowがあります。メイン ウィンドウは、Enter キーのキー リリースを処理します。しかし、QDialog が開いていてフォーカスがあるときに Enter キーを押すと、メイン ウィンドウもこのイベントをキャッチします。
どうすればそれを防ぐことができますか?QDialog にイベント フィルターをインストールして、keyReleaseEvent および keyPressEvent 関数を再実装し、親 (現在は 0) を変更しようとしましたが、何も役に立たないようです...
QMainWindow のイベント フィルターを変更して、キー リリースの代わりにキー プレスを処理するようにすると、QDialog は正常に動作しますが、回避しようとしている他のバグが発生することに注意してください...
bool Window::eventFilter(QObject *, QEvent *event) {
if (type == QEvent::KeyRelease) {
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
switch(keyEvent->key()) {
case Qt::Key_Enter:
// do something here
break;
default:
break;
}
}
Dialog::Dialog(unsigned int num, QWidget *parent)
: QDialog(parent), num(_num)
{
ui.setupUi(this);
ui.btnOK->setEnabled(false);
connect(ui.btnOK, SIGNAL(clicked()), this, SLOT(accept()));
connect(ui.btnCancel, SIGNAL(clicked()), this, SLOT(reject()));
installEventFilter(this);
}
bool Dialog::eventFilter(QObject *, QEvent *event) {
return true;
}
前もって感謝します