QT之Connect訊號與槽的連線函式

2021-10-08 11:13:39 字數 2647 閱讀 9971

一、不用寫connect:

qt訊號和槽函式的命名是有規則的,組成為on_物件名_訊號,以按鈕為例,如果物件名為pushbutton,在你在寫槽函式的時候按照這種規則,則

在標頭檔案中新增:

private slots:

void on_pushbutton_clicked();

在.cpp檔案下面的建構函式中就不用寫connect了,直接寫槽函式的實現就能實現訊號和槽的連線。

二、自定義:以按鈕為例,使用connect

在標頭檔案中新增:

private slots:

void on_button1_clicked();

在.cpp檔案下面的建構函式中新增:

connect(ui->pushbutton,signal(clicked()),this,slot(on_button1_clicked()));

2.1最常規的用法:

訊號可以是外掛程式自帶的,也可以是自己定義的如:

//新建乙個按鈕

qpushbutton * btn = new qpushbutton

(this)

; btn->

settext

("設定");

//將訊號和槽連線 其中btnclicked()為自定義的槽函式

connect

(btn,

signal

(clicked()

), this,

slot

(btnclicked()));

2.2 connect()函式基於函式指標的過載形式:這是qt5中加入的一種過載形式,指定訊號和槽兩個引數不再使用signal()和 slot()巨集,並且槽函式不再必須是使用slots關鍵字宣告的函式,可以是任意能和訊號關聯的成員函式。要使乙個成員函式可以和訊號關聯,那麼這個函式的引數數目不能超過訊號的引數數目,但是並不要求該函式擁有的引數型別和訊號中對應的引數型別完全一致,只需要可以進行隱式轉換即可。如:

可以從父類(qpushbutton)取 也可以從子類(mypushbutton)取

使用這種方式與前一種相比,還有乙個好處就是可以在編譯時進行檢查,訊號或槽的拼寫錯誤、槽函式引數數目多於訊號的引數數目等錯誤在編譯時就能夠被發現。所以在qt5中建議使用這種關聯形式。

2.3. 帶引數的訊號和槽函式

當訊號的引數與槽函式的引數數量不同時,只能是訊號的引數數量多於槽函式的引數數量,且前面相同數量的引數型別應一致,訊號中多餘的引數會被忽略。

//訊號:

void

mysignal

(int a,

float b)

;//槽:

void mainwindow:

:myslot

(int b)

//訊號槽:

connect

(this,

signal

(mysignal

(int

,float))

, this,

slot

(myslot

(int))

);//傳送訊號:

emit mysignal(5

,2.2

);

2.4 connect 應用c++11 lamda

connect

(dlg,

&mydialog:

:dlgreturn,[=

](int value)

);

引用乙個應用例子理解上述的幾種方法:

#include

"widget.h"

#include

"ui_widget.h"

#include

widget:

:widget

(qwidget *parent)

:qwidget

(parent),ui

(new ui:

:widget));

} widget::~

widget()

void widget:

:qt4_slot()

void widget:

:qt5_slot()

————————————————

100717064

Qt訊號與槽的connect

函式原型 qmetaobject connection qobject connect const qobject sender,const char signal,const qobject reciver,const char method,qt connectiontype type qt a...

Qt訊號與槽connect 函式

qmetaobject connection qobject connect const qobject sender,傳送方物件 const char signal,傳送物件中的事件訊號 const qobject receiver,接收方物件 const char method,接收物件中的要執...

QT訊號槽connect函式

使用qt開發時,通常使用connect函式只傳遞四個引數 connect sender,signal signal receiver,slot slot 所以我們有可能認為該函式就只有四個引數,但實際上是有第五個引數的,只是通常該函式已經給第五個引數賦值了而已,我們所使用的是預設值 sender和r...