日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Qt 控制台 使用connect连接信号和槽

發布時間:2025/3/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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).

#define PI 3.14class Foo: public QObject {Q_OBJECTpublic:Foo();int value() const{return val;};double getArea() const {return area;};public slots:void setValue(int);void cirleSolve(int radius);signals:void valueChanged(int);void areaChange(int); private:int val;double area; };

其次,實現這個類:

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连接信号和槽的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。