2012-03-04 73 views
1

我知道我需要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(); 
} 
+0

你不能在你的主窗口上定义keyPressEvent吗? – jdi 2012-03-04 07:22:55

+0

@jdi我不知道该怎么做。 – 2012-03-04 08:58:21

+0

我意识到你已经用osx设置解决了你的问题,但是你可以通过阅读以深入理解事件:http://doc.qt.nokia.com/qq/qq11-events.html – jdi 2012-03-04 16:36:35

回答

1

您不必做任何事情就可以使用标签或光标键this is the default behavior在按钮之间导航。

+0

是的,呃....我发布的示例代码似乎与此相矛盾。输入,空格,制表符等什么都不做,即使我先在一个按钮上手动设置焦点。只点击作品。 – 2012-03-04 08:35:07

+0

对不起,我发布的示例代码已经实现了setFocus,它使空格键“点击”退出按钮,但否则,没有键盘事件会做任何事情。 – 2012-03-04 08:37:43

+0

我编译并运行了您的代码,并且可以使用Tab键和光标键在两个按钮之间导航。我可以用空格键激活一个按钮。如果添加'quit.setDefault(true)',您可以使用回车键激活该按钮。这是与Windows 7/MinGW/Qt 4.8。 – 2012-03-04 08:42:10

0

请参阅QWiget::focusPolicy以防止小工具获得焦点。

+0

我试过' window.setFocusPolicy(Qt :: StrongFocus);'已经,并且不会改变行为。 – 2012-03-04 08:40:46