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

QT中信號和槽淺淺淡淡

移動開發
信號和槽機制是 QT 的核心機制,要精通 QT 編程就必須對信號和槽有所了解。信號和槽是一種高級接口,應用于對象之間的通信,它是 QT 的核心特性,也是 QT 區別于其它工具包的重要地方。

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

使用自定義的信號,需要注意以下幾點:

1、類的聲明和實現分別放在.h和.cpp文件中;

2、類聲明中包含Q_OBJECT宏;

3、信號只要聲明不要設計其的實現函數;

4、發射信號用emit關鍵字;

5、自定義槽的實現與普通成員函數的實現一樣。
 
當程序中所使用的類中具有用戶自定義的槽和信號時,你需要使用moc(元對象編譯器)對程序進行編譯。

編譯方法一:

你可以將moc文件編譯為目標文件,之后把它與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  

編譯方法二:

創建一個空的文件夾,把源文件ClassDeclaration.h,ClassDefinion.cpp和main.cpp放入其中,執行以下命令:

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

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

創建用戶自定義的信號與槽的具體步驟:

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

  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. };  

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

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

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

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

在這段代碼中,調用 FunctionForChangingTheValue( )函數去修改數據。你需要做的***一件事是將信號連接起來:

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

這個例子的功能是當調用SetValue()函數時,檢查新值是否等于舊值。如果不等,則發射ValueChanged()信號,又因為 ValueChanged()信號被連接到ChangeValue,因此當發射ValueChanged()信號時將執行ChangeValue() 。之后,ChangeValue()調用FunctionForChangingTheValue()函數去修改實際數據。

責任編輯:zhaolei 來源: 互聯網
相關推薦

2011-06-22 15:24:50

Qt 線程

2011-06-20 14:40:19

Qt 3D

2011-06-15 14:38:01

QT 信號

2011-06-09 09:45:35

Linux QT 信號

2011-06-28 15:47:13

Qt 信號

2011-07-08 10:49:59

Cocoa Touch 靜態庫

2011-06-23 13:38:27

QT 元對象 信號

2011-06-23 14:40:13

Qt 信號

2011-06-13 10:21:25

QT 信號 槽機制

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 進程 通信

2022-02-28 13:56:27

PET隱私數據保護

2021-06-21 11:11:29

LinuxIO磁盤IO

2011-07-05 18:32:52

QT 信號 機制

2011-07-05 18:40:19

QT 信號 機制

2011-06-29 16:34:11

Qt 子線程 線程

2024-10-21 09:06:15

2011-07-01 14:34:02

Thread Affinity 信號
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品www| 在线看av网址 | 日韩av在线中文字幕 | 亚洲精品无| 国产精品久久久久久妇女 | 久久久久国产精品一区二区 | 美女精品一区 | 91久久精品一区二区二区 | 久久黄网 | 午夜影院在线观看 | 黄色网址免费在线观看 | 2018天天干天天操 | 日p视频免费看 | 亚洲一区二区av在线 | 亚洲精品第一国产综合野 | 福利网址| av黄色在线 | 国产精品永久免费 | av国产精品毛片一区二区小说 | 黄色激情毛片 | 欧美日产国产成人免费图片 | 欧美精品欧美精品系列 | 国产盗摄视频 | 国产精品美女久久久久久久久久久 | 欧美性猛片aaaaaaa做受 | 91综合网| 中国人pornoxxx麻豆 | 免费一区二区三区 | 日韩一级免费 | 欧美性猛交 | 国产人久久人人人人爽 | 欧美成人一区二区三区片免费 | 国产一区二区影院 | 日韩av在线一区 | 天天曰夜夜操 | 黄视频网址 | www.婷婷 | 国产精品久久久久aaaa九色 | 人人人人人爽 | 三级视频久久 | 精品成人在线视频 |