将事件发布到Qt GUI线程以模拟按键

时间:2013-11-19 15:05:18

标签: c++ qt events

我想在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);

1 个答案:

答案 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);
}