问:事件循环开始时是否有通知?

Bab*_*oey 18 events qt event-loop signals-slots

我有一个Qt应用程序与这种main()...

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    MainWindow   mainWin;

    ... A separate, non-GUI thread is launched here

    mainWin.Init();
    mainWin.show();

    app.exec();
}
Run Code Online (Sandbox Code Playgroud)

在mainWin需要知道何时可以开始与mainWin通信之前创建的另一个线程.但由于mainWin使用Qt信号,插槽,定时器等,因此在事件循环运行之前(通过exec()),它还没有真正准备好.

我的问题是:当事件循环开始时是否会发出一些信号或事件?

考虑一下.在mainWin.Init()中,您可以创建类似QTimer的内容,甚至可以调用.start()来启动它.但实际上它不会被运行并在调用exec()之前触发事件.这就是我需要知道事件循环何时真正开始的原因.

for*_*idt 14

您可以在exec()通话前向您的窗口发送信号.这将在一个app信号队列中放入一个条目.当exec()运行时,信号将被传递,您的窗口将知道事件循环正在运行.

一种简单的方法是使用QTimer::singleShot(0, &mainWin, SLOT(onEventLoopStarted()));连接到窗口类的自定义槽的方法.