【问题标题】:QApplication does not handle key event?QApplication 不处理按键事件?
【发布时间】:2012-07-20 05:09:23
【问题描述】:
QApplication app(argc, 0);
MyDialog * pDlg = new MyDialog(0, Qt::WindowTitleHint | Qt::CustomizeWindowHint);
if (qApp) qApp->installEventFilter(pDlg);

在 main() 中,我只是为 qApp 安装了一个事件过滤器。然后在 MyDialog.cpp 中:

bool MyDialog::eventFilter(QObject * watched, QEvent * event)
{
    if (watched == qApp)
    {
        if (event->type() == QEvent::KeyPress)
        {
            // do something
            return true;
        }
        return false;
    }
    return QDialog::eventFilter(watched, event);
}

我设置了一些断点。可以到达“return false”行,这意味着qApp已经成功地在MyDialog上安装了一个事件过滤器。但是当我按下键盘时,'return true' 行从未到达。我记得 QApplication 将调度所有事件。谁能告诉我为什么会这样?

【问题讨论】:

    标签: qt qt4.7 qdialog qevent qkeyevent


    【解决方案1】:

    使用keyPressEvent

    void MyDialog::keyPressEvent(QKeyEvent *e)
    {
    // do something
    }
    

    【讨论】:

    • 我犯了一个愚蠢的错误。如果 (watched == qApp) 错误,则“watched”是准备接收事件的 obj,而不是事件转发给 watcher 的 qApp。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-30
    • 1970-01-01
    • 1970-01-01
    • 2022-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多