【发布时间】:2012-03-04 16:29:42
【问题描述】:
我知道我需要一个用于 Qt 4 的事件过滤器来处理键盘事件。但我以前有类似的工作,无需手动配置。我已经阅读了它的文档,但我无法为该应用程序设置一个事件吞噬者。我不需要在按钮级别管理事件。
下面的示例代码说明了两个按钮,除非通过鼠标单击,否则它们不会聚焦或激活。我希望默认情况下将焦点放在一个按钮上,我可以使用button.setFocus() 来完成。我还希望能够导航通过使用选项卡或向上/向下键激活的按钮,然后使用输入/空格激活。问题是我对如何实现它感到困惑。我是否需要继承一些 Q* 类并实现事件过滤器类,然后安装在对象上?还是有更简单的方法?
#include <QApplication>
#include <QPushButton>
#include <QWidget>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWidget window;
window.resize(200, 200);
QPushButton quit("Quit", &window);
quit.setGeometry(10, 40, 180, 40);
QObject::connect(&quit, SIGNAL(clicked()), &app, SLOT(quit()));
QPushButton nothing("Do Nothing", &window);
nothing.setGeometry(10, 80, 180, 40);
quit.setFocus();
window.show();
return app.exec();
}
【问题讨论】:
-
你不能在你的主窗口上定义一个keyPressEvent吗?
-
@jdi 我不知道该怎么做。
-
我知道您已经解决了 osx 设置的问题,但您可以阅读此文章以更深入地了解事件:doc.qt.nokia.com/qq/qq11-events.html