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