Qt:事件循环启动时是否有通知?

Qt:事件循环启动时是否有通知?,qt,events,signals-slots,event-loop,Qt,Events,Signals Slots,Event Loop,我有一个使用这种main()的Qt应用程序 在mainWin之前创建的另一个线程需要知道它何时可以开始与mainWin通信。但由于mainWin使用Qt信号、插槽、计时器等,因此在事件循环运行(通过exec())之前,它并没有真正做好启动的准备 我的问题是:当事件循环开始时,是否会发出一些信号或事件 想想这个。在mainWin.Init()中,您可以创建类似QTimer的东西,甚至可以调用.start()来启动它。但在调用exec()之前,它实际上不会运行并触发事件。这就是为什么我需要知道事件循

我有一个使用这种main()的Qt应用程序

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

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


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

您可以按以下顺序执行:

QApplication app(argc, argv);
Mainwinwdow mainWin;
QThread yourThread;

//connect the signals from the thread to the mainWin here

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

yourThread.start();

return app.exec();

您可以在调用
exec()
之前向窗口发送信号。这将在
应用程序的信号队列中放置一个条目。
当运行
exec()
时,将传递信号,您的窗口将知道事件循环正在运行


一种简单的方法是使用
QTimer::singleShot(0,&mainWin,SLOT(onEventLoopStarted())

由于在事件循环尚未运行时发出的信号不会丢失,因此线程可能不需要知道窗口何时准备就绪。

您的线程可以立即开始向窗口发送信号,但在事件循环运行时,它只会从窗口接收信号。

您的线程是Qt线程还是本机线程?仅供参考,这似乎不适用于PyQt。不知何故,在调用app.exec_()之前会发出和处理信号。对我来说,在使用PyQt调用app.exec_()之前不会传递任何信号。(2019年11月)
QApplication app(argc, argv);
Mainwinwdow mainWin;
QThread yourThread;

//connect the signals from the thread to the mainWin here

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

yourThread.start();

return app.exec();