我问的是在事件引擎中有很多qt事件排队的情况。 QTimer
是否会通过事件发出timeout()
信号,并且queuedConnection
会在一个广告位中创建另一个事件吗?
答案 0 :(得分:3)
当Qt::DirectConnection
发出QTimer::timeout
信号时,将立即调用与QTimer
连接的广告位。如果使用排队连接,它将安排一个事件来调用插槽,该插槽将由事件循环处理。 QTimer
使用timerEvent
与emit the timeout
signal。
答案 1 :(得分:1)
默认情况下,它不是排队连接,除非它在不同的线程中运行。因此它是DirectConnection。
我想说,一般来说,如果你想保证事件的顺序顺序,你最好将Qt :: QueuedConnection与定时器之类的东西一起使用,即使在同一个线程中也是如此,以便事件进入队列并且是不仅仅是对immidiatley采取行动 - 因为这种行为是某种 - 更像是一种“中断”。
但是,如果你真的希望立即对timer timeout()进行操作,那么使用Qt :: DirectConnection - 我觉得你需要更加小心这种连接类型(比如定时器可以在中间的其他正常代码)。
修改强>
“普通代码”是指......好吧,请看下面的评论:
答案 2 :(得分:0)
当QTimer超时时,将每个QTimer的信号与插槽连接起来的每个信号槽连接都会激发此插槽一次。