首页 文章

在QWizard中,下一个按钮不能接受按键事件,但是接受鼠标按下事件?

提问于
浏览
0

我有一个类继承QWizard,并添加2个独立的QWizardPage(s) . 在进入下一页之前,我想在第一页上做一些工作(即检查互联网连接) . 用户可以通过鼠标单击“下一步”按钮,或者直接按键输入/返回,因为默认情况下“下一个”按钮是聚焦的 . 所以我为按钮安装了一个eventfilter:

button(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);
}

当我多次尝试时,单击鼠标可以始终使我的事件处理代码运行,但按下键无关紧要 . 另一个奇怪的事情是,按下鼠标按钮而不释放,然后离开并释放,向导停留在第一页,现在我可以按键,所有这一切都没问题 .

任何人都可以帮忙找到原因,那是Qt的错误吗?如何让关键事件正常工作?

1 回答

  • 0

    尝试另一个简单的解决方案,而无需安装事件过滤器 . 在主应用程序中使用QkeyPressEvent .

    void YourAppClass::keyPressEvent(QKeyEvent *e)
    {
         if(Nextbutton->hasFocus() && e->key()== Qt::Key_Return || e->key() == Qt::Key_Enter)
         {
         Do your job//I guarantee this will be reached upon pressing return with button focus
         }
    }
    

    您可以在nextbutton的clickevent()中添加鼠标单击功能 .

相关问题