Qt自定义信号槽
前言
在使用Qt開發(fā)中,有時(shí)候在兩個(gè)線程之間進(jìn)行數(shù)據(jù)的傳輸,比如使用一個(gè)線程往另一個(gè)線程傳輸一個(gè)OpenCV的Mat數(shù)據(jù)或者一個(gè)Rect的坐標(biāo),那么最好是自已定義一個(gè)信號(hào),然后在另一個(gè)線程定義一個(gè)槽來接收這個(gè)信號(hào)。
一.信號(hào)與槽
1.在Qt里面定義的信號(hào)是以函數(shù)形式聲明的,返回類型是void,傳入的參數(shù)為要發(fā)送出去的數(shù)據(jù),前面有signals關(guān)鍵字標(biāo)記。
signals:void getStr(QString &str);//定義一個(gè)可以發(fā)送str的信號(hào)2.信號(hào)槽繼承于QObject類,頭文件中必須有Q_OBJECT的類聲明,否則會(huì)報(bào)錯(cuò)。
3.槽函數(shù)跟Qt正常的槽函數(shù)一樣,可以用 public、private、protected 修飾,槽的參數(shù)不能有缺省值。
4.發(fā)射擊信號(hào)(emit)是在程序要傳出數(shù)據(jù)的位置使用。
5.信號(hào)和槽是一種松耦合機(jī)制,也可以說是一種分布式機(jī)制,信號(hào)廣播出去,槽自然會(huì)訂閱接收。
6.如果一個(gè)信號(hào)與多個(gè)槽相關(guān)連的話,那么,當(dāng)這個(gè)信號(hào)被發(fā)射時(shí),與之相關(guān)的槽被激活的順序是隨機(jī)的。
二、代碼
1.發(fā)射信號(hào)代碼
void Dialog::on_emitBtn_clicked() {QString str = ui->EmitLineEdit->text();emit getStr(str); }
2.完整代碼看上傳的資源。
https://download.csdn.net/download/matt45m/12049993
總結(jié)
- 上一篇: C++对中文字符的处理
- 下一篇: Qt与OpenCV编程:在QLabel加