在subwidget.h中宣告乙個signal. 和之前的訊號函式重名但是有引數:
void backsignal(qstring);
之後在subwidget.cpp的槽函式sendsignal()中也傳送該訊號:
emit backsignal("子視窗請求返回");
在mainwidget.h中宣告乙個槽函式來響應該訊號:
void logslot(qstring);
並在mainwidget.cpp中定義該槽函式, 列印訊號傳過來的字串:
void mainwidget::logslot(qstring log)
因為使用到了qdebug, 所以需要在mainwidget.h中新增標頭檔案:
#include
下面在mainwidget.cpp中建立連線即可:
connect(&subwin, backsignal, this, &mainwidget::logslot);
如果沒有重名訊號的話, 這樣寫是沒有問題的, 但是我們現在由兩個backsignal訊號, 乙個不帶引數, 乙個帶引數, 編譯器是沒辦法區分的, 需要我們告訴它, 所以, 刪掉那兩條訊號都是backsignal的connect語句重新建立連線:
void(subwidget::*backsignal)() = &subwidget::backsignal; // 我是沒有引數的backsignal, 叫backsignal1
connect(&subwin, backsignal, this, &mainwidget::backslot);
void(subwidget::*backsigna2)(qstring) = &subwidget::backsignal; // 我是帶乙個qstring引數的backsignal, 叫backsignal2
connect(&subwin, backsigna2, this, &mainwidget::logslot);
儲存後 ctrl + r執行, 點選back按鈕, 會輸出訊號傳送的字串:
如果用qt4的語法的話, 會十分簡單:
connect(&subwin, signal(backsignal()), this, slot(backslot()));
connect(&subwin, signal(backsignal(qstring)), this, slot(logslot(qstring)));
但是qt4這種寫法在編譯時是不進行錯誤, 也就是如果你訊號和槽函式名字寫錯了, 也是可以編譯通過的. 在執行時才會報錯. 而qt5新寫法在編譯時就會報錯, 所以qt4更簡單qt5會更安全.
mainwidget.h
#ifndef mainwidget_h
#define mainwidget_h
#include #include #include "subwidget.h"
#include class mainwidget : public qwidget
;#endif // mainwidget_h
mainwidget.cpp#include "mainwidget.h"
mainwidget::mainwidget(qwidget *parent)
: qwidget(parent)
void mainwidget::nextslot()
void mainwidget::backslot()
void mainwidget::logslot(qstring log)
mainwidget::~mainwidget()
subwidget.h#ifndef subwidget_h
#define subwidget_h
#include #include class subwidget : public qwidget
;#endif // subwidget_h
subwidget.cpp#include "subwidget.h"
subwidget::subwidget(qwidget *parent) : qwidget(parent)
void subwidget::sendsignal()
QT5 訊號與槽
前言 訊號與槽是qt的精華所在,也是他區分於其他軟體的關鍵地方,所以我們學習qt肯定無法繞過這一核心 當物件內部狀態發生改變,訊號就被反射,只有定義了這個訊號的類和他的子類才能發射這個訊號 訊號的宣告是在標頭檔案中進行的,qt的signals關鍵字指出進入了訊號宣告區,隨後即可宣告自己的訊號。訊號由...
Qt5,訊號槽關聯錯誤
一 錯誤提示 error c2664 qmetaobject connection qobject connect const qobject const char const char qt connectiontype const 無法將引數 2 從 overloaded function 轉換...
訊號與槽的新語法 Qt5
在 qt5 的 qtbase staging 倉庫的 qobject connect ptr 分支中已經引入了一種全新的訊號與槽的語法。參看 new signal slot syntax possibly coming in qt 5 一文。connect slider,signal valuech...