(一)Qt 訊號與槽及案例及自定義槽函式(1)

2021-10-18 10:39:01 字數 2719 閱讀 4294

案例及自定義槽函式(1)

訊號和槽:在 qt 中處理介面各個元件的互動操作時的一種機制。

signal:訊號就是在特定情況下被發射的事件,例如硬體中的中斷,按鍵按下出發乙個中斷,這個觸發機制可以是上公升沿或下降沿,qt中也是這種機制,按下,或鬆開按鍵會傳送響應的訊號。

gui 程式設計的主要內容就是對介面上各元件的訊號的響應,只需要知道什麼情況下發射哪些訊號,合理地去響應和處理這些訊號就可以了。

slot:槽就是對訊號響應的函式。槽就是乙個函式,與一般的c++函式是一樣的,可以定義在類的任何部分(public、private 或 protected),可以具有任何引數,也可以被直接呼叫。槽函式與一般的函式不同的是:槽函式可以與乙個訊號關聯,當訊號被發射時,關聯的槽函式被自動執行。(模擬為硬體中的中斷函式,當按鍵按下(訊號發射),觸發中斷進入中斷處理函式(進入槽函式,處理響應的事件))

實現內容為,主視窗和子視窗的相互切換,通過相應的按鍵訊號實現切換。

首先要新建乙個qt專案,基於qwidget基類。

如上圖,基類base class下拉選擇qwidget,子類命名為mywidget,下面會自動生成相應的.cpp和.**件。然後在相應的框架中實現功能。

主視窗功能實現:

(1)在子類mywidget類中定義相應的功能和槽函式

**如下:

mywidget.h內容:

#ifndef mywidget_h

#define mywidget_h

#include

#include

#include

#include

"sbuwidget.h"

//包含子視窗標頭檔案

class

mywidget

:public qwidget

;#endif

// mywidget_h

mywidget.cpp內容

#include

"mywidget.h"

#include

#include

mywidget::

mywidget

(qwidget *parent)

//建構函式

:qwidget

(parent)

//初始化自定義槽函式

void mywidget::

myslot()

void mywidget::

mychangesbu()

void mywidget::

dealsbu1()

mywidget::

~mywidget()

子視窗實現

sbuwidget.h內容

#ifndef sbuwidget_h

#define sbuwidget_h

#include

#include

class

sbuwidget

:public qwidget

;#endif

// sbuwidget_h

sbuwidget.cpp內容

#include

"sbuwidget.h"

#include

"mywidget.h"

sbuwidget::

sbuwidget

(qwidget *parent)

:qwidget

(parent)

void sbuwidget::

sendslot()

主視窗類初始化

(1)子視窗類的乙個例項化物件作為主視窗的類。

(2)設定相應的按鍵,以及槽函式的宣告

(3)在主視窗類的建構函式中實現對子視窗物件的呼叫,實現子視窗的顯示與關閉。

子視窗類的初始化

(1)設定相應的按鍵,以及槽函式。

(2)設定槽函式為傳送訊號給主視窗,通過主視窗類構造函式呼叫相應的槽函式,實現主視窗的顯示與關閉

以上只不過是類的初始化,還需要例項化具體的視窗物件,以及顯示。

main.cpp 內容

Qt自定義訊號槽

qt自定義訊號槽,在控制台程式中實現 qt5 如下 qt5 include news h class news public qobject void send signals void new const qstring name private qstring m name reader.h i...

Qt 自定義訊號槽

使用 connect 可以讓我們連線系統提供的訊號和槽。但是,qt 的訊號槽機制並不僅僅是使用系統提供的那部分,還會允許我們自己設計自己的訊號和槽。這也是 qt 框架的設計思路之一,用於我們設計解耦的程式。本節將講解如何在自己的程式中自定義訊號槽。訊號槽不是 gui 模組提供的,而是 qt 核心特性...

一 自定義訊號槽

qt5 include news h class news public qobject void send signals void new const qstring name private qstring m name reader.h include include class reade...