Qt學習(一 Qt簡介,訊號和槽)

2022-09-18 18:24:11 字數 4341 閱讀 2106

選擇位置,選擇構建套件

選擇類的資訊,其中 基類 有三種選擇。

其他兩個是qwidget的子類。

有兩種方式建立圖形介面:**/拖拽

點選完成,會生成幾個檔案。原始檔和標頭檔案。還有乙個 ***.pro 檔案。

其中:***.pro為工程檔案。

main.cpp:程式的入口

#include "widget.h"

// 包含乙個應用程式類的標頭檔案

int main(int argc, char *ar**)

.pro 檔案解釋:

qt       += core gui		// qt包含的模組

greaterthan(qt_major_version, 4): qt += widgets		// 大於4版本以上,包含widget模組

sources += \

main.cpp \

widget.cpp // 原始檔

headers += \

widget.h // 標頭檔案

標頭檔案:

// 防止標頭檔案重複包含 if not define

#ifndef widget_h

#define widget_h

// 包含標頭檔案 qwidget 視窗類

#include // widget 公有繼承自 qwidget

class widget : public qwidget

;#endif // widget_h

原始檔:

#include "widget.h"

// 建構函式的實現,初始化列表

widget::widget(qwidget *parent)

: qwidget(parent)

widget::~widget()

#include "widget.h"

#include // 建構函式的實現,初始化列表

widget::widget(qwidget *parent)

: qwidget(parent)

widget::~widget()

qt中的物件樹就是qt中物件間的父子關係,每乙個物件都有它所有子物件的指標,都有乙個指向其父物件的指標。當建立物件在堆區時,如果指定的父親是qobject派生下來的類或者是qobject的子類派生下來的類,當父物件被析構時子物件也會被析構。在一定程度上簡化了記憶體**機制。

視窗左上角為原點(0,0)。橫方向為x軸,豎方向為y軸。

訊號和槽是 qt 特有的訊息傳輸機制,它能將相互獨立的控制項關聯起來。

在 qt 中,使用者和控制項的每次互動過程稱為乙個事件,比如「使用者點選按鈕」是乙個事件,「使用者關閉視窗」也是乙個事件。每個事件都會發出乙個訊號,例如使用者點選按鈕會發出「按鈕被點選」的訊號,使用者關閉視窗會發出「視窗被關閉」的訊號。

qt 中的所有控制項都具有接收訊號的能力,乙個控制項還可以接收多個不同的訊號。對於接收到的每個訊號,控制項都會做出相應的響應動作。例如,按鈕所在的視窗接收到「按鈕被點選」的訊號後,會做出「關閉自己」的響應動作;再比如輸入框自己接收到「輸入框被點選」的訊號後,會做出「顯示閃爍的游標,等待使用者輸入資料」的響應動作。在 qt 中,對訊號做出的響應動作就稱為槽。

訊號和槽機制底層是通過函式間的相互呼叫實現的。每個訊號都可以用函式來表示,稱為訊號函式;每個槽也可以用函式表示,稱為槽函式。

點選第二個按鈕按鈕關閉視窗。

// connect(訊號傳送者,傳送的訊號[函式位址],訊號接受者,處理的槽函式[函式位址]);

connect(btn2,&qpushbutton::clicked,this,&widget::close);

connect()qobject類中的乙個靜態成員函式,專門用來關聯指定的訊號函式和槽函式。

#ifndef teacher_h

#define teacher_h

#include class teacher : public qobject

;#endif // teacher_h

#ifndef student_h

#define student_h

#include class student : public qobject

;#endif // student_h

#ifndef widget_h

#define widget_h

#include #include "teacher.h"

#include "student.h"

class widget : public qwidget

;#endif // widget_h

#include "teacher.h"

teacher::teacher(qobject *parent) : qobject(parent)

void teacher::overclass()

#include "student.h"

#include student::student(qobject *parent) : qobject(parent)

void student::treat()

#include "widget.h"

widget::widget(qwidget *parent)

: qwidget(parent)

widget::~widget()

#include "widget.h"

訊號函式和槽函式通常位於某個類中,和普通的成員函式相比,它們的特別之處在於:

需要用到函式指標:

函式指標,其本質是乙個指標變數,該指標指向這個函式。總結來說,函式指標就是指向函式的指標。

// 宣告格式:型別說明符 (*函式名) (引數)

int (*fun)(int x,int y);

// 函式指標是需要把乙個函式的位址賦值給它,有兩種寫法

fun = &function;

fun = function;

// 取位址運算子&不是必需的,因為乙個函式識別符號就表示了它的位址

// 呼叫函式指標的方式也有兩種:

x = (*fun)();

x = fun();

// 函式指標 指向 函式位址

void (teacher::*teachersignal)(qstring) = &teacher::hungry;

void (student::*studentslot)(qstring) = &student::treat;

connect(t,teachersignal,s,studentslot);

t->overclass();

void student::treat(qstring foodname)

// 點選按鈕 觸發下課

qpushbutton* btn = new qpushbutton("下課",this);

this->resize(600,400);

connect(btn,&qpushbutton::clicked,t,&teacher::overclass);

可以利用disconnect斷開訊號連線

// 訊號斷開操作 引數與connect一樣

disconnect(btn,&qpushbutton::clicked,t,&teacher::overclass);

匿名函式物件。。。先空

qt學習 訊號,槽

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

Qt訊號和槽

qt將訊號和槽關聯起來的connect使用時需要注意帶相應的引數,否則會出現訊號發出後不能呼叫槽的問題,例子如下 發出訊號的宣告 signals void receiveddata uchar dat,uint len 接收訊號的槽宣告 private slots void getdata ucha...

Qt 訊號和槽

函式原型 qobject connect const qobject sender,const char signal,const qobject receiver,const char method,qt connectiontype type qt autoconnection 通常使用的con...