我想在Qt中模拟按键。我在网上找到了一些例子,但还没有找到它。我有这个方法:
void SimKeyEvent::pressTab()
{
QKeyEvent *event = new QKeyEvent(QEvent::KeyPress, Qt::Key_Space, Qt::NoModifier);
QCoreApplication::postEvent(receiver, event);
}
我不知道如何正确处理GUI线程,该线程应该是上面代码行中的“接收器”。我试过的是传递'app':
QGuiApplication app(argc, argv);
通过SimKeyEvent类构造函数并创建一个私有指针。
在main.cpp中:
SimKeyEvent *simKeyEvent = new SimKeyEvent(0, &app);
SimKeyEvent.h
private:
QGuiApplication *app;
SimKeyEvent构造函数:
SimKeyEvent::SimKeyEvent(QObject *parent, QGuiApplication *app) :
QObject(parent)
{
this->app = app;
}
然后我改为:
QCoreApplication::postEvent(app, event);
这不起作用,我不知道代码是否有问题,或者它应该以不同的方式完成。
main.cpp中:
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QtQuick2ApplicationViewer viewer;
viewer.setMainQmlFile(QStringLiteral("qml/GC/MainMenu.qml"));
SimKeyEvent *simKeyEvent = new SimKeyEvent(0, &app);
viewer.showExpanded();
return app.exec();
}
编辑: 我也试过用'this': QCoreApplication :: postEvent(this,event);
答案 0 :(得分:0)
有关此问题的答案,请参阅this帖子。
代码段:
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);
}