1. 程式人生 > >Qt中訊號和槽函式的3種對映方法

Qt中訊號和槽函式的3種對映方法

在Qt Creater中提供了三種建立訊號和槽的方法,詳細介紹如下:

實現功能:點選OK按鈕,TextLabel顯示“Hello World”

詳細過程:

首先,執行Qt Creater,建立Qt Gui application工程。


其次,在點選.ui檔案,在控制元件欄選擇“pushButton”和“TextLabel”控制元件。設計介面如下圖:


最後,是選擇3種建立訊號和槽的方法,具體如下:

第一種方法:

1)在標頭檔案mainwindow.h的類MainWindow的定義中宣告槽函式,程式碼如下:

public slots:
    void on_pushButton_clicked();
2)在mainwindow.cpp檔案中,定義槽函式,程式碼如下:
void MainWindow::on_pushButton_clicked()
{
    ui->label->setText("Hello World");
}
3)建立對映,在類MainWindow的建構函式中新增如下語句,以便將訊號和槽函式進行連線:
connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(on_pushButton_clicked)));
connect()函式的原型為:

#include < QObject>

static bool QObject::connect(const QObject *sender, const char *signal, const QObject *receiver, const char *member);

sender和receiver分別指定了被關聯的訊號和槽的傳送者和接受者,signal是訊號,Qt要求必須使用巨集SINGAL將訊號函式指標轉化為指定的型別。member是槽函式,Qt要求必須使用巨集SLOT轉換函式指標。巨集SIGNAL和巨集SLOT的引數形式如下:SIGNAL(funname(param_type1,param_type2...)、SLOT(funname(param_type1,param_type2)

funname是函式名,param_typex是函式中的引數型別。

4)編譯執行即可。

第二種方法:

右擊“OK”按鈕,選擇“Go to slot...”,選擇clicked(),單擊OK,即完成訊號和槽函式的連結。clicked是訊號函式,槽函式是on_pushButton_clicked();


在自動生成的槽函式on_pushButton_clicked()中重複第一種方法的步驟2即可,編譯、執行。

第三種方法:

1)右擊介面選擇“change signals/slot”(改變訊號/槽)選項,單擊“+”,新增新的槽函式,如圖。單擊“OK”,完成槽函式的新增。


2)在窗體編輯區的下方有訊號和槽的對映視窗,單擊做上角的加號,出現一行新的對映,在這裡編輯對映函式。結果如下圖:


3)重複第一種方法的第1、第2步,完成槽函式的宣告和定義。

4)編譯執行。

最終效果如下:


點選OK按鈕即可列印“Hello World”