Qt:事件循环启动时是否有通知?
我有一个使用这种main()的Qt应用程序 在mainWin之前创建的另一个线程需要知道它何时可以开始与mainWin通信。但由于mainWin使用Qt信号、插槽、计时器等,因此在事件循环运行(通过exec())之前,它并没有真正做好启动的准备 我的问题是:当事件循环开始时,是否会发出一些信号或事件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()之前,它实际上不会运行并触发事件。这就是为什么我需要知道事件循
想想这个。在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();