【发布时间】:2012-06-04 14:01:46
【问题描述】:
我有一个类继承 QWizard,并添加 2 个独立的 QWizardPage(s)。在转到下一页之前,我想在第一页做一些工作(即检查互联网连接)。用户可以通过鼠标单击“下一步”按钮,或者直接通过键盘按回车键,因为“下一步”按钮默认为焦点。所以我为按钮安装了一个事件过滤器:
按钮(QWizard::NextButton)->installEventFilter(this);
然后在向导类中实现事件处理代码:
bool MyWizard::eventFilter(QObject *watched, QEvent *event)
{
if (watched == button(QWizard::NextButton))
{
if (currentId() == startPageId)
{
if (event->type() == QEvent::KeyPress)
{
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
if (keyEvent->key() == Qt::Key_Return || keyEvent->key() == Qt::Key_Enter)
{
// Do something. Cannot be reached.
}
}
else if (event->type() == QEvent::MouseButtonPress)
{
// Do something. Can be reached.
}
}
}
return QWizard::eventFilter(watched, event);
}
正如我多次尝试的那样,单击鼠标始终可以使我的事件处理代码运行,但按键无济于事。另一个奇怪的事情是,按下鼠标按钮而不释放,然后移开并释放,向导停留在第一页,现在我可以按键了,一切都OK了。
任何人都可以帮助找到原因,这是一个 Qt 错误吗?如何使关键事件正常工作?
【问题讨论】:
-
你试过没有条件 if (keyEvent->key() == Qt::Key_Return || keyEvent->key() == Qt::Key_Enter)
-
我试过了,但即使是这一行 "QKeyEvent *keyEvent = static_cast
(event);"无法到达。
标签: qt mouseevent wizard qt4.7 qkeyevent