成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

QT中信號(hào)和槽淺淺淡淡

移動(dòng)開(kāi)發(fā)
信號(hào)和槽機(jī)制是 QT 的核心機(jī)制,要精通 QT 編程就必須對(duì)信號(hào)和槽有所了解。信號(hào)和槽是一種高級(jí)接口,應(yīng)用于對(duì)象之間的通信,它是 QT 的核心特性,也是 QT 區(qū)別于其它工具包的重要地方。

所有從 QObject 或其子類 ( 例如 Qwidget) 派生的類都能夠包含信號(hào)。當(dāng)對(duì)象改變其狀態(tài)時(shí),信號(hào)就由該對(duì)象發(fā)射 (emit) 出去,這就是對(duì)象所要做的全部事情,它不知道另一端是誰(shuí)在接收這個(gè)信號(hào)。這就是真正的信息封裝,它確保對(duì)象被當(dāng)作一個(gè)真正的軟件組件來(lái)使用。用于接收信號(hào),但它們是普通的對(duì)象成員函數(shù)。一個(gè)并不知道是否有任何信號(hào)與自己相連接。而且,對(duì)象并不了解具體的通信機(jī)制。

使用自定義的信號(hào),需要注意以下幾點(diǎn):

1、類的聲明和實(shí)現(xiàn)分別放在.h和.cpp文件中;

2、類聲明中包含Q_OBJECT宏;

3、信號(hào)只要聲明不要設(shè)計(jì)其的實(shí)現(xiàn)函數(shù);

4、發(fā)射信號(hào)用emit關(guān)鍵字;

5、自定義槽的實(shí)現(xiàn)與普通成員函數(shù)的實(shí)現(xiàn)一樣。
 
當(dāng)程序中所使用的類中具有用戶自定義的槽和信號(hào)時(shí),你需要使用moc(元對(duì)象編譯器)對(duì)程序進(jìn)行編譯。

編譯方法一:

你可以將moc文件編譯為目標(biāo)文件,之后把它與ClassDefinion.cpp和main.cpp一起鏈接,下面具體的操作步驟:

  1. #moc ClassDeclaration.h -o ClassDeclaration.cpp   
  2. #g++ -c ClassDeclaration.cpp -o ClassDeclaration.o   
  3. #g++ -c ClassDefinion.cpp -o ClassDefinion.o   
  4. #g++ -c main.cpp -o main.o   
  5. #g++ -lqt ClassDefinion.o ClassDeclaration.o main.o -o MyProgram  

編譯方法二:

創(chuàng)建一個(gè)空的文件夾,把源文件ClassDeclaration.h,ClassDefinion.cpp和main.cpp放入其中,執(zhí)行以下命令:

  1. #qmake -project   
  2. #qmake   
  3. #make  

完成上述步驟后,就生成可執(zhí)行文件了(可執(zhí)行文件的名與你所創(chuàng)建的文件夾的名稱相同),我們就可以運(yùn)行它了。

創(chuàng)建用戶自定義的信號(hào)與槽的具體步驟:

首先你需要在類聲明中聲明自定義的信號(hào)和槽。在關(guān)鍵字public slots:下聲明自定義槽;在signals:關(guān)鍵字下聲明自定義的信號(hào)。如下例所示:

  1. class MyMainWindow : public QWidget   
  2. {   
  3. Q_OBJECT   
  4. public:   
  5. void MyMainWindow();   
  6. void SetValue(int);   
  7. signals:   
  8. void ValueChanged(int);   
  9. public slots:   
  10. void ChangeValue(int);   
  11. };  

正如你可能猜想到的,只有當(dāng)一個(gè)新的值傳遞給SetValue()函數(shù)時(shí),SetValue()函數(shù)才應(yīng)該調(diào)用ValueChanged()信號(hào)。之后,通過(guò)將ValueChanged()信號(hào)連接到ChangeValue()槽,使得當(dāng)有新值傳遞給SetValue()函數(shù)時(shí),能夠引起數(shù)值的變化。多數(shù)情況下,這是不必要的,但它演示了信號(hào)的使用方法。SetValue()函數(shù)可以像下面格式實(shí)現(xiàn):

  1. void MyMainWindow::SetValue(int value)   
  2. {   
  3. if(value!=oldvalue)   
  4. {   
  5. oldvalue=value;   
  6. emit ValueChanged(value);   
  7. }   
  8. }  

如你看到的只有,當(dāng)新值與舊值不同時(shí)才發(fā)射ValueChanged()信號(hào),且oldvalue將被修改為value。應(yīng)注意的是,信號(hào)一類的普通函數(shù)不同,它只能使用emit關(guān)鍵字發(fā)射。ChangeValue()可定義為:

  1. void MyMainWindow::ChangeValue(int value)   
  2. {   
  3. FunctionForChangingTheValue(value);   
  4. }  

在這段代碼中,調(diào)用 FunctionForChangingTheValue( )函數(shù)去修改數(shù)據(jù)。你需要做的***一件事是將信號(hào)連接起來(lái):

  1. connect(this,SIGNAL(ValueChanged(int)),this,SLOT(ChangeValue(int)));  

這個(gè)例子的功能是當(dāng)調(diào)用SetValue()函數(shù)時(shí),檢查新值是否等于舊值。如果不等,則發(fā)射ValueChanged()信號(hào),又因?yàn)?ValueChanged()信號(hào)被連接到ChangeValue,因此當(dāng)發(fā)射ValueChanged()信號(hào)時(shí)將執(zhí)行ChangeValue() 。之后,ChangeValue()調(diào)用FunctionForChangingTheValue()函數(shù)去修改實(shí)際數(shù)據(jù)。

責(zé)任編輯:zhaolei 來(lái)源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-06-22 15:24:50

Qt 線程

2011-06-20 14:40:19

Qt 3D

2011-06-15 14:38:01

QT 信號(hào)

2011-06-09 09:45:35

Linux QT 信號(hào)

2011-06-28 15:47:13

Qt 信號(hào)

2011-07-08 10:49:59

Cocoa Touch 靜態(tài)庫(kù)

2011-06-23 13:38:27

QT 元對(duì)象 信號(hào)

2011-06-23 14:40:13

Qt 信號(hào)

2011-06-13 10:21:25

QT 信號(hào) 槽機(jī)制

2023-10-07 08:21:35

PyQtPython

2021-12-23 15:07:40

QtC++編譯程序

2011-06-27 16:18:24

Qt Designer

2011-06-22 17:09:50

QT 進(jìn)程 通信

2022-02-28 13:56:27

PET隱私數(shù)據(jù)保護(hù)

2021-06-21 11:11:29

LinuxIO磁盤(pán)IO

2011-07-05 18:40:19

QT 信號(hào) 機(jī)制

2011-06-29 16:34:11

Qt 子線程 線程

2011-07-05 18:32:52

QT 信號(hào) 機(jī)制

2024-10-21 09:06:15

2011-07-01 14:34:02

Thread Affinity 信號(hào)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 日韩视频一区二区在线 | 国产精品久久久久久 | 国产女人第一次做爰毛片 | 亚洲国产精品第一区二区 | 91久久| 久久精品国产久精国产 | 日本精品一区二区 | 男女污污动态图 | 国产一区精品在线 | 日本一区二区三区视频在线 | 综合久久综合久久 | 欧美日韩久久久 | 欧美乱码精品一区二区三区 | 一区二区三区国产好的精 | 久久精品国产清自在天天线 | 91国在线视频 | 国产精品视频久久久 | 国产一级片av| 精精精精xxxx免费视频 | 成人一区二区三区 | 99久久婷婷国产综合精品电影 | 久草精品在线 | 中文字幕日韩欧美 | 开操网 | 国产精品99999 | 最新91在线 | 久热精品在线观看视频 | 奇米久久久| 亚洲成人av在线播放 | 国产免费a| 国产精品国产三级国产aⅴ原创 | 人人九九精 | 国产羞羞视频在线观看 | 亚洲在线一区二区三区 | 国产精品揄拍一区二区久久国内亚洲精 | 中文字幕av在线一二三区 | 欧美激情综合 | 欧美日韩亚洲一区 | 国精日本亚洲欧州国产中文久久 | 日韩三级 | 欧美色性 |