QT-执行QTimer :: timout()信号导致QEVENT
Qt - does a QTimer::timeout() signal result in a QEvent?
qt doc:
如果没有事件循环运行,则不会将事件传递到对象。 例如,如果您在线程中创建QTimer对象,但请勿调用 exec(),QTimer永远不会发出其超时()信号。打电话 Deletelater()也无法正常工作。(这些限制适用于主要 线程也。)
这是否意味着信号void QTimer::timeout()
也会发行QEvent
?
如果是这样,QT DOC在哪里说明?
QT DOC在哪里说明?
无处不在,因为这对QTimer
的用户无关紧要。计时器事件是实现细节。它已交付给计时器对象本身,因此您确实必须竭尽全力拦截它。这是QTimer
的工作方式:
class QTimer : public QObject {
Q_TIMER
QBasicTimer m_timer;
protected:
void timerEvent(QTimerEvent * ev) override {
if (ev->timerId() == m_timer.timerId())
emit timeout();
}
/*...*/
};
如果考虑到它,则无法在不运行发出信号的代码的情况下发出任何信号,而安全运行此类代码的唯一方法是将事物异步排放的代码是代码,以供缩小的运行式块,以使其陷入困境。在每个机会中控制事件循环。平台通知了事件循环,该平台已计时器定时发布,然后发出信号。如果QT发出的信号(例如Unix信号等侵入性异步回调)之类的信号(例如,在信号处理程序中您可以做的事情很少),那么您会遇到麻烦。/p>
相关文章:
- Qt VTK交互风格的信号到小部件
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何在没有信号的情况下从C++执行QML插槽
- 线程之间的布尔停止信号
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 当用户在qtablewidget中输入单元格时,如何获得信号?C++
- 有可能在信号处理程序中设置promise吗
- 代码在我的计算机上运行良好,但是在将其提交给coursera时遇到未知的信号11问题
- 在条件变量中触发错误信号的频率是多少
- 在信号处理程序中捕获C++未处理的异常并恢复应用程序
- 调试和自由执行中的信号处理
- 升压信号2将插槽传递到成员功能以断开连接
- C++函数包装器来捕获某些信号
- 如何在qt中将信号和插槽与另一个对象连接 --解决了
- 中止信号来自 C++ 中的中止(3) (SIGABRT)
- Qt将信号与另一个类方法连接
- C++ 信号和插槽不工作:插槽不响应事件
- Coursera :自动评分器的未知信号 11
- QT-执行QTimer :: timout()信号导致QEVENT