lambda表示式
昨天已經把自定訊號和槽寫好了,今天需要把訊號設定為帶參的形式。
1、在teacher.h中加入同名帶參函式hungry(qstring foodname)
#ifndef teacher_h
#define teacher_h
#include
class
teacher
:public qobject
;#endif
// teacher_h
2、在student.h與student.cpp中也宣告並自定義同名帶參函式treat(qstring foodname);
#ifndef student_h
#define student_h
#include
class
student
:public qobject
;#endif
// student_h
#include
"student.h"
#include
student::
student
(qobject *parent)
:qobject
(parent)
void student::
treat()
void student::
treat
(qstring foodname)
3、在主視窗.cpp檔案中測試,emit用於觸發訊號。
#include
"mainwindow.h"
#include
"ui_mainwindow.h"
#include
#include
"mybutton.h"
mainwindow::
mainwindow
(qwidget *parent)
:qmainwindow
(parent),ui
(new ui::mainwindow)
mainwindow::
~mainwindow()
void mainwindow::
overclass()
執行控制台列印以下輸出
小結:訊號和槽函式發生過載時,需先定義函式指標指向明確的函式位址,再呼叫connect連線訊號和槽,否則編譯無法通過,因為編譯器不知道你傳送訊號的函式是哪乙個。qstring 轉為 char *的方式為
qstring.toutf8().data(),若不轉換型別,控制台輸出的是帶雙引號的字串。
訊號連線按鈕
定義乙個新的qpushbuton按鈕,再將其連線觸發訊號函式overclass
qpushbutton * newbtn =
newqpushbutton
("下課"
,this);
newbtn-
>
move
(100
,400);
connect
(newbtn,
&qpushbutton::clicked,
this
,&mainwindow::overclass)
;
訊號連線訊號
先將訊號函式位址改為之前無參的那個,因為訊號函式的引數必須大於或等於槽函式引數,且引數型別必須一一對應。void (teacher:: *teachersignal)(void) = &teacher::hungry;
再做連線connect(newbtn,&qpushbutton::clicked,te,teachersignal);
disconnect斷開訊號
disconnect(newbtn,&qpushbutton::clicked,te,teachersignal);
形式:{}
是lambda表示式的識別符號
= 值傳遞
& 引用傳遞
() 引數
{} 實現體
mutable 修飾值傳遞變數 ,可以修改拷貝的資料,改變不了本體
()->int 返回值(此例為int型別)
Qt 學習筆記 二
對於這樣的共享者,我心存感激,但是我不能直接把內容直接貼到我的blog中,這樣是對原創blog的一種不敬。我乙個例子乙個例子的跟著,一直到 自定義signal 與slot的時候出現問題了。我編譯的時候code block 出現這樣的錯誤 c cproject lession3 model.h 3 e...
Qt學習筆記之二
如下圖所示 新版本的qt gui 被包含到qtwidget中去了。可以在新建工程的pro檔案中新增包含項 qt coreguiwidgets 之前只有core 和 gui 可以在後面新增widgets 這也是為什麼有些朋友找不到標頭檔案比如說 等等 如下圖所示 再檢視qtwidgets資料夾可以發現...
Qt學習筆記
1.參考資料 1 2 3 4 5 6 2.faq 2.1.qt creator 2.1.1.xp下用qt creator編譯自帶例子mdi sdi 當不勾選projects build settings build environment的 clear system environment 時,編譯...