Qt 多线程中地信号与槽
生活随笔
收集整理的這篇文章主要介紹了
Qt 多线程中地信号与槽
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Qt 多線程中地信號與槽
函數原型:
1 QObject::connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection)enum Qt::ConnectionType
此枚舉描述可以在信號和插槽之間使用的連接類型。特別地,它確定特定的信號是立即傳遞到一個插槽,還是排隊等待稍后的傳遞。
通常使用的connect,實際上最后一個參數使用的是Qt::AutoConnection類型。
| Qt::AutoConnection(0) | (默認)如果接收者位于發出信號的線程中,則使用Qt::DirectConnection。否則,使用Qt::QueuedConnection。連接類型在信號發出時確定。 |
| Qt::DirectConnection(1) | 當信號發出時,插槽立即被調用。插槽在發送信號的線程中執行。 |
| Qt::QueuedConnection(2) | 當控制返回到接收者線程的事件循環時調用插槽。插槽在接收線程中執行。 |
| Qt::BlockingQueuedConnection(3) | 與Qt::QueuedConnection相同,只是發出信號的線程阻塞,直到插槽返回。如果接收者位于發送信號的線程中,則不能使用此連接,否則應用程序將死鎖。 |
| Qt::UniqueConnection(0x80) | 這是一個可以與上述任何一種連接類型組合使用的標志,使用的是按位或。當Qt::UniqueConnection被設置時,如果連接已經存在,QObject::connect()將會失敗(也就是說,如果相同的信號已經被連接到同一對對象的同一個槽中)。這個標志是在Qt 4.6中引入的。 |
在多線程中發出一個信號,沒被子線程接收到,原因就是默認連接方式為Qt::AutoConnection,在多線程中又為Qt::QueuedConnection,對于排隊連接,參數必須是Qt的元對象系統所知道的類型,因為Qt需要復制參數以將它們存儲在后臺事件中。如果你嘗試使用排隊連接,并得到錯誤消息。
解決辦法有兩種:
參考代碼:
參考鏈接:https://www.cnblogs.com/cxjchen/archive/2013/06/04/3116909.html
總結
以上是生活随笔為你收集整理的Qt 多线程中地信号与槽的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【图像分割】基于投影法实现扫描文件的光学
- 下一篇: 【Scrum模式语言9】准备就绪的定义(