我有一個QMainWindow,安裝了一個打開QDialog的事件過濾器。 主窗口處理Enter鍵的鍵釋放。 但是,當QDialog打開並且處於焦點狀態時,按下Enter鍵時,主窗口也會捕獲此事件。QMainWindow正在處理應該被QDialog捕獲的事件
我該如何防止這種情況發生?我試圖在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;
}
提前感謝的
你能在這裏顯示你的代碼嗎? – lazyhammer 2012-04-23 11:31:01
我添加了代碼。 – kakush 2012-04-23 11:55:15