1. 程式人生 > >Qt5.9Creator中自定義訊號SIGNAL和在另一個類中用該訊號觸發槽函式用法

Qt5.9Creator中自定義訊號SIGNAL和在另一個類中用該訊號觸發槽函式用法

本文章主要總結在Qt5.9Creator中自定義一個訊號,然後在另一個類裡面用該訊號觸發槽函式的例項。具體的例項是在類ClassA中自定義一個訊號Signal1,然後在MAinWindows類中用該訊號Signal1來觸發槽函式SlotFunction()的呼叫。

注意:

1.使用訊號與槽機制,一定要是QObject類和QObject派生類才有效,否則該機制是無效的。

2.使用訊號與槽機制時,需要在類的標頭檔案的第一行加入Q_OBJECT巨集,同時該類最好是QObject的派生類。

3.如果正確使用訊號與槽機制,同時沒有語法錯誤;但是編譯時仍然報錯,這時可以嘗試把編譯出的build*檔案整個刪除,然後再次編譯。(有時是編譯過的build檔案對訊號與槽機制有影響)

一、具體例項用法

1.1新建一個widget工程,工程名稱為SignalTest,基類選擇QMainWindows。然後在ui介面上拖入一個pushButton按鈕和新增按鈕槽函式,如下圖所示:


1.2新新增一個C++類,類名為ClassA,基類選擇為QObject,如下圖所示:


1.3在classa.h標頭檔案中,新增一個自定義訊號Signal1,同時新增一個Test()成員函式,如下程式碼所示:


1.4在原始檔classa.cpp中,新增如下程式碼:


1.5接下來,要在主視窗MAinWindows類中,用一個槽函式繫結該訊號,同時呼叫這個訊號。在MAinWindows.h標頭檔案中,例項一個類ClassA的物件,程式碼如下:



1.6在MAinWindows.h標頭檔案中,新增一個槽函式,該槽函式的作用是與自定義的訊號Signal1繫結,程式碼如下:


1.7在MAinWindows.cpp的建構函式中,初始化指標和繫結自定義訊號,程式碼如下:


1.8在MAinWindows.cpp的按鈕槽函式中,新增如下程式碼:


1.9在自定義槽函式中,新增如下程式碼:


二、構建程式和執行結果,如下圖所示:



由上圖結果可知,點選按鈕後,觸發按鈕槽函式;然後按鈕槽函式呼叫ClassA的Test()函式;Test()函式每被呼叫一次,就觸發一次Signal1訊號;由於Signal1訊號與槽函式SlotFunction()繫結,故觸發Signal1訊號後,立刻觸發SlotFunction()槽函式;而SlotFunction()槽函式的功能是輸出一條語句。所以上圖結果表明,在一個新建的類(ClassA類)裡面自定義一個訊號(Signal1),然後在另一個類(MAinWindows類)裡面呼叫該訊號,用該訊號來觸發槽函式的呼叫,是正確可行的。

三、原始碼資源下載:

http://download.csdn.net/download/naibozhuan3744/10270045

參考內容:

http://www.cnblogs.com/ike_li/p/4990626.html(重點參考)

http://blog.csdn.net/u012964993/article/details/30454923