以编程方式按下Qt中的键盘按钮

时间:2013-11-19 19:27:59

标签: c++ qt

我的任务听起来很简单:我想以编程方式按下Qt / C ++中的键盘按钮。所以我想要一些代码,让GUI认为按下了一些键盘键。

如果可能,我不想使用特定于Windows的API。

可以这样做吗?如果是这样,我应该如何/在哪里开始?

2 个答案:

答案 0 :(得分:1)

bool MyWidget::event(QEvent *event)
{
     if (event->type() == QEvent::KeyPress) {
         QKeyEvent *ke = static_cast<QKeyEvent *>(event);
         if (ke->key() == Qt::Key_Tab) {
             // special tab handling here
             return true;
         }
     } else if (event->type() == MyCustomEventType) {
         MyCustomEvent *myEvent = static_cast<MyCustomEvent *>(event);
         // custom event handling here
         return true;
     }
     return QWidget::event(event);
}

这是here的一个简单示例。主要思想是你必须将KeyPress事件发送到你的窗口对象。 Here是另一个很好的例子。

答案 1 :(得分:1)

模拟/生成用户密钥事件的唯一可靠方法是使用QtTest模块。

#include <QtTest>
#define QT_WIDGETS_LIB
#include <qtestkeyboard.h>

...

// For example:
QTest::keyClick(QApplication::focusWidget(), key, Qt::NoModifier);

// or even more low level:

qt_handleKeyEvent(widget->windowHandle(), QEvent::KeyPress, key, Qt::NoModifier);
qt_handleKeyEvent(widget->windowHandle(), QEvent::KeyRelease, key, Qt::NoModifier);