c++ - 始终将焦点策略放在隐藏的小部件上? (Qt C++)

标签 c++ qt qkeyevent

我正在学习在 Qt (C++) 中处理按键和按键释放事件。我有一个类键盘,我想用它来处理所有这些事件。它继承了QObject。它不需要处理任何鼠标事件。当我的应用程序对该类开放时,我正在尝试弄清楚如何引导所有键盘输入。

我尝试将它作为小部件添加到我的 MainWindow 类的布局中并隐藏它(小部件,而不是布局)。目前,它没有响应。

我也在我的 MainWindow 类中尝试过这个:

void MainWindow::keyPressEvent(QKeyEvent *event)
{
    keys->keyPressEvent(event); 
    //Keys is a Keyboard object with this public method:
    //void keyPressEvent(QKeyEvent *event);
} 

但这也行不通。在我的 Keyboard::Keyboard() 构造函数中,我有:

this->setFocusPolicy(Qt::StrongFocus);

我不确定是否还需要做任何其他事情来确保键盘输入到达那里。

如果有人知道为我的 Qt 应用程序将所有键盘事件发送到此类的方法,那将非常有帮助!

谢谢,

约翰

最佳答案

对于任何想知道的人,我找到了问题的答案。

在处理我的键盘事件的类的构造函数中,我添加了这一行:

QWidget::grabKeyboard();

现在,当该应用程序处于事件状态时,所有键盘输入都会直接进入该小部件。 您可以查看引用以获取更多信息: QWidget::grabKeyboard .

注意:在您调用 QWidget::releaseKeyboard() 之前,其他任何东西(即没有其他小部件)都不会获得键盘输入。

关于c++ - 始终将焦点策略放在隐藏的小部件上? (Qt C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25467136/

相关文章:

c++ - 如何查找 ActiveX 控件生成的事件的调度 ID

c++ - 字符串不返回主函数

c++ - float转QString的格式

c++ - 独立于桌面环境或窗口管理器以编程方式更改 Linux 中的墙纸

c++ - QKeyPress - 在 Qt 中模拟按键

c++ - 绑定(bind)成员函数到成员变量

c++ - 在 Visual Studio 2010 中使用 LibTiff

c++ - 使用 QStyledItemDelegate 绘制 QTreeView 项目

Qt Key Pressevent Enter