Qt 控制台 使用connect连接信号和槽
導(dǎo)言:
Qt的信號號和槽 (Signal&Slots)是Qt的特性,深入理解該機制是能夠精通Qt編程的關(guān)鍵。
信號號和槽 (Signal&Slots)的作用:
信號和槽用于兩個對象之間的通信。
常見的如:Qt的部件類(l例如:Widget)中定義了一些信號和槽,一般的操作是子類化這個部件,然后添加自己的信號和槽來實現(xiàn)想要的功能。
信號號和槽 (Signal&Slots)機制與回調(diào)函數(shù)的區(qū)別:
回調(diào)函數(shù)是指向函數(shù)的指針,把這個回調(diào)函數(shù)指針傳遞給要被處理的函數(shù),那么就可以在這個函數(shù)被處理時在適當(dāng)?shù)牡胤秸{(diào)用這個回調(diào)函數(shù)。
信號和槽的機制,一個信號可以關(guān)聯(lián)到多個槽上,多個信號也可以關(guān)聯(lián)到同一個槽上,甚至,一個信號還可以關(guān)聯(lián)到另一個信號上。
信號和槽的運用:
定義信號
例如:
signals:
void dlgReturn(int); //自定義的信號
說明:
1、聲明一個信號要使用signals關(guān)鍵字
2、在signals 前面不能使用public、private和protected等限定符,因為只有定義了該信號的類及其子類才可以發(fā)射該信號。
3、而且信號只用聲明,不需要也不能對它進行定義實現(xiàn)。
4、信號沒有返回值,只能用void類型。
5、使用信號和槽,還需要在類聲明的最開始處添加Q_OBJECT宏。
定義槽:
例如:
private slots:
void showValue(int value);
說明:
1、聲明一個槽需要使用slot關(guān)鍵字。
2、一個槽可以是private\public\或者protected類型。
3、槽也是可以聲明為虛函數(shù)。
信號和槽關(guān)聯(lián)函數(shù):
bool QObject::connect(const QObject *sender, const char * signal, const QObject *receiver, const char *method, Qt::ConnectionType type = AutoConnection )
一個控制臺實現(xiàn)connect連接信號和槽的實例
目標(biāo):通過該實例實現(xiàn)對象間的簡單通信。
首先定義一個類Foo
1、設(shè)置兩個私有變量val,area。 同時可以通過公有函數(shù)value()、getArea()來訪問這兩個私有變量。
2、定義兩個信號 valueChange(int), areaChange(int)
3、定義槽 setValue(int)、circleSolve(int).
其次,實現(xiàn)這個類:
Foo::Foo() {}//更新val 值,并發(fā)送值更改單哦信號 void Foo::setValue(int v) {if(v!= val){val=v;emit valueChanged(v);} }//計算圓面積,并發(fā)送面積信號 void Foo::cirleSolve(int radius) {area = PI*radius*radius;emit areaChange(radius); }接著,在main()關(guān)聯(lián) 并測試,這里做了三項內(nèi)容
1、建立對象c、b
2、將c對象的操作與b對象的槽相關(guān)聯(lián)。
這樣當(dāng)c對象調(diào)用setValue()、circleSolve()函數(shù)將會影響b的私有變量。
int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);Foo c,b;QObject::connect(&c,SIGNAL(valueChanged(int)),&b,SLOT(setValue(int)));QObject::connect(&c,SIGNAL(areaChange(int)),&b,SLOT(cirleSolve(int )));c.cirleSolve(6);cout<<"the circle area of b: "<<b.getArea()<<endl;b.setValue(8);cout<<"the testValue of b is :"<<b.value()<<endl;cout<<"the testValue of c is :"<<c.value()<<endl;c.setValue(5);cout<<"the testValue of b is :"<<b.value()<<endl;cout<<"the testValue of c is :"<<c.value();return a.exec(); }信號和槽的使用總結(jié):
1、定義信號和槽
2、關(guān)聯(lián)
在適當(dāng)?shù)臅r候發(fā)送信號
3、使用要點:
-
需要繼承QObject或其子類
在類聲明的最開始添加QOBject 宏
槽中的參數(shù)類型要和信號的參數(shù)類型對應(yīng)。
信號只用聲明,且返回值為void的類型。
總結(jié)
以上是生活随笔為你收集整理的Qt 控制台 使用connect连接信号和槽的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt5 中 关于Widget Mappe
- 下一篇: QMetaMethod 获取成员函数的元