的信號和槽課件_第1頁
的信號和槽課件_第2頁
的信號和槽課件_第3頁
的信號和槽課件_第4頁
的信號和槽課件_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

QT5和QT4信號和槽的區(qū)別QT4信號和槽1.函數(shù)定義boolconnect(constQObject*,constchar*,constQObject*,constchar*,Qt::ConnectionType);參數(shù)分別為:發(fā)送者sender、信號signal、接收者receiver和槽slot,最后一個基本不用。sender類型是constQObject*,signal的類型是constchar*,receiver類型是constQObject*,slot類型是constchar*。這個函數(shù)將signal和slot作為字符串處理。Qt4使用了SIGNAL和SLOT這兩個宏,將信號和槽的函數(shù)名轉(zhuǎn)換成了字符串。connect(this->ui->pBClose,SIGNAL(clicked(bool)),this,SLOT(mySlot());QT4信號和曹函數(shù)缺點Qt4信號槽的不足沒有編譯期的檢查:Qt4中的信號/槽會被宏轉(zhuǎn)化成字符串處理,而字符串的比較機制是在程序運行的時候檢測的.而且,轉(zhuǎn)換成字符串后,信號槽的參數(shù)數(shù)據(jù)類型就會丟失.這就導致,有的時候,信號槽在編譯的時候沒有問題,在運行的時候,反而出錯.無法使用相容類型的參數(shù):因為信號槽的機制使用的是字符串的匹配的方法,所以,槽函數(shù)的參數(shù)類型的名字,必須和信號參數(shù)類型的名字一致,同時,還必須和頭文件中聲明的類型名字一致,也就是字符串意義上的嚴格相同.如果使用了typdef或者namespace這樣的類型,雖然實際的類型是一樣的,但是由于字符串的名字不一樣,所以Qt4中是會有錯誤的.如下偽代碼示例(實際類型都是int,但因為按照字符串處理,所以Qt4中,編譯前不能通過.)//head.hfiletypedefintMyInt;typedefintBigInt;//head.cppfileconnect(Sender,SIGNAL(sigFun(MyInt)),Receiver,SLOT(sltFun(BigInt)));QT5的信號和槽Qt5中不僅解決了上述Qt4中的問題,而且還有一些擴充.支持編譯期的檢查:拼寫錯誤,槽函數(shù)參數(shù)個數(shù)大于信號參數(shù)的個數(shù)等;支持相容類型的自動轉(zhuǎn)換;槽允許連接到任意的函數(shù):Qt5中,因為槽使用的是函數(shù)指針,所以槽的調(diào)用,可以是任意的成員函數(shù),靜態(tài)函數(shù),還可以是C++11的lambda表達式;Qt4中槽的聲明一般是privateslots,private是私有限制,只有把槽函數(shù)當作普通函數(shù)使用的時候,才會體現(xiàn)私有的性質(zhì).而SLOT,把槽函數(shù)轉(zhuǎn)化成了字符串,此時private是不起作用的.Qt5中,因為使用的是函數(shù)指針,所以在類的外部,connect是無法關(guān)聯(lián)一個類的私有槽的,否則,編譯的時候就會報錯.Qt5中,增加了信號槽的靈活性,加強了信號槽的檢測性Qt5信號槽的語法例子信號和槽函數(shù)原型:QMetaObject::Connectionconnect(constQObject*sender,PointerToMemberFunction,constQObject*receiver,PointerToMemberFunction,Qt::ConnectionType)分析:sender發(fā)送控件指針和receiver接收控件指針也都存在,都是constQObject*,但是signal和slot類型則是PointerToMemberFunction。看這個名字就應該知道,這是指向成員函數(shù)的指針。

Qt5信號和槽舉例//ClassA.hsignals:voidsigClassA(intnum);voidsigStringChanged(QStringstr);//ClassB.hslots:voidsltClassB(intnum);//任意的成員函數(shù),靜態(tài)函數(shù)都闊以voidsltStringChanged(QVariantstr);//ClassB.cppconnect(Sender,&ClassA::sigClassA,this,&ClassB::sltClassB);//函數(shù)指針關(guān)聯(lián)的時候,不需要指明參數(shù),而且this可以省略ClassA表示Sender的類名ClassB表示sltClassB這個槽函數(shù)所在的類名簡單舉例任務1:設(shè)計一個按鈕,一個標簽點擊按鈕觸發(fā)自定義槽自定義槽中在標簽里顯示0-100的隨機數(shù)要求標簽字體為大字體,顏色為藍色提示:voidCtrlDemo::mySlot(){QPalettepe;pe.setColor(QPalette::WindowText,Qt::red);ui->label->setPalette(pe);//設(shè)置調(diào)色板QFontfont;font.setFamily("simsun");font.setPointSize(200);ui->label->setFont(font);//設(shè)置字體intrand=qrand();rand=rand%100;QStringstr;//str.sprintf("

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論