4

我问的是在事件引擎中有很多 qt 事件排队的情况。是否通过事件QTimer发出timeout()信号并将与queuedConnection插槽创建另一个事件?

4

3 回答 3

3

当信号由 发出时,与 连接的插槽Qt::DirectConnection将立即被调用。如果使用排队连接,它会安排一个事件来调用该槽,该槽将由事件循环处理。用于发出信号。_QTimer::timeoutQTimerQTimertimerEventtimeout

于 2016-06-16T07:15:04.473 回答
1

不,默认情况下它不是排队连接,除非它在不同的线程中运行。因此它是 DirectConnection。

我想说,一般来说,如果你想保证事件的顺序,你最好将 Qt::QueuedConnection 与定时器之类的东西一起使用,即使在同一个线程中,这样事件就会进入队列而不只是被执行在immidiatley上-因为这种行为更像是“中断”。

但是,如果您真的希望立即执行计时器 timeout() 则使用 Qt::DirectConnection - 我觉得您通常需要更加小心这种连接类型(使用可以在其他中间触发的计时器之类的东西正常代码)。

编辑

“普通代码”是指......好吧,请参阅下面的评论:

于 2016-06-16T07:16:38.470 回答
0

当一个 QTimer 超时时,每个将这个 QTimer 的信号与一个槽连接的 Signal-Slot 连接都会触发这个槽一次。

于 2016-06-16T06:37:47.197 回答