我有一个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