Qt學習之路隨記 訊號槽

2021-09-23 05:47:54 字數 2099 閱讀 8464

qt 5.9.2 版本,qobject::connect() 常用的形式為 

connect(sender,   signal, receiver, slot);
connect() 一般會使用前面四個引數,第乙個是發出訊號的物件,第二個是傳送物件發出的訊號,第三個是接收訊號的物件,第四個是接收物件在接收到訊號之後所需要呼叫的函式。

1.

qmetaobject::connection connect(const qobject *sender, const char *signal, const qobject *receiver, const char *method, qt::connectiontype type = qt::autoconnection)
sender為傳送控制項名稱,receiver為接受控制項名稱,signal為觸發事件,method為接受函式。例子如下:

qlabel *label = new qlabel;

qscrollbar *scrollbar = new qscrollbar;

qobject::connect(scrollbar, signal(valuechanged(int)), label, slot(setnum(int)));

乙個訊號也可以關聯另乙個訊號:

class mywidget : public qwidget

; mywidget::mywidget()

2.

qmetaobject::connection connect(const qobject *sender, pointertomemberfunction signal, const qobject *receiver, pointertomemberfunction method, qt::connectiontype type = qt::autoconnection)
signal 和 method 型別則是 pointertomemberfunction是指向成員函式的指標。

qlabel *label = new qlabel;

qlineedit *lineedit = new qlineedit;

qobject::connect(lineedit, &qlineedit::textchanged, label, &qlabel::settext);

3.

qmetaobject::connection connect(const qobject *sender, pointertomemberfunction signal, functor functor)
最後乙個引數是 functor 型別。這個型別可以接受 static 函式、全域性函式以及 lambda 表示式。

void somefunction();

qpushbutton *button = new qpushbutton;

qobject::connect(button, &qpushbutton::clicked, somefunction);

4.

qmetaobject::connection connect(const qobject *sender, pointertomemberfunction signal, const qobject *context, functor functor, qt::connectiontype type = qt::autoconnection)
例:

void somefunction();

qpushbutton *button = new qpushbutton;

qobject::connect(button, &qpushbutton::clicked, this, somefunction, qt::queuedconnection);

訊號槽要求訊號和槽的引數一致,所謂一致,是引數型別一致。如果不一致,允許的情況是,槽函式的引數可以比訊號的少。

槽函式存在的那些引數的順序必須和訊號的前面幾個一致起來。

qt學習 訊號,槽

c.gui.qt.4程式設計 第二版 加 布蘭切特,英 薩默菲爾德.掃瞄版 學習庫www.xuexi111.com pdf 訊號和槽是qt程式設計的基礎,它可以讓各種物件聯絡在一起。1.使用connect連線訊號和槽 還能連線訊號和訊號 static qmetaobject connection c...

Qt學習之路 2 初探訊號槽

1 qobeject是所有類的根。2 connect 物件a,動作1,物件b,動作2 的意思就是當物件a發生動作1的時候,物件b就發生動作2。3 有signal和slot的地方,必須要有qobject,所以是qobject connect。4 還有一種初始化qpushbutton的方法 qpushb...

Qt學習之路 9 深入了解訊號槽

訊號槽機制是qt程式設計的基礎。通過訊號槽,能夠使qt各元件在不知道對方的情形下能夠相互通訊。這就將類之間的關係做了最大程度的解耦。槽函式和普通的c 成員函式沒有很大的區別。它們也可以使virtual的 可以被重寫 可以使public protected或者private的 可以由其它的c 函式呼叫...