【问题标题】:Moving between buttons with keyboard events在带有键盘事件的按钮之间移动
【发布时间】: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

标签: qt qt4 keyboard


【解决方案1】:

您无需执行任何操作即可使用制表键或光标键在按钮之间导航,this is the default behavior

【讨论】:

  • 是的,嗯....我发布的示例代码似乎与此相矛盾。输入、空格、制表符等什么都不做,即使我先手动设置焦点在一个按钮上。只有点击有效。
  • 对不起,我发布的示例代码已经实现了 setFocus,它使空格键“单击”退出按钮,但除此之外,没有键盘事件做任何事情。
  • 我编译并运行了您的代码,我能够使用 Tab 键和光标键在两个按钮之间导航。我可以用空格键激活一个按钮。如果您添加quit.setDefault(true),您可以使用回车键激活该按钮。这适用于 Windows 7 / MinGW / Qt 4.8。
  • 有趣。我使用的是 Mac OS X 10.7.3,但这些都不起作用。
  • 我没有 Mac,但通过快速搜索发现了这一点。它适用吗? macyourself.com/2009/08/22/…
【解决方案2】:

请参阅QWiget::focusPolicy 以防止小部件获得焦点。

【讨论】:

  • 我已经尝试过window.setFocusPolicy(Qt::StrongFocus);,但它并没有改变行为。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-20
  • 2017-11-01
  • 2019-05-19
  • 1970-01-01
  • 2016-10-11
  • 2014-07-06
  • 1970-01-01
相关资源
最近更新 更多