欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報激活碼778899分享:學習 【QT】信號和槽

柚子快報激活碼778899分享:學習 【QT】信號和槽

http://yzkb.51969.com/

個人主頁~

信號和槽

一、概述二、信號和槽的使用連接信號和槽純代碼實現(xiàn)可視化實現(xiàn)

三、自定義信號和槽1、基本語法(1)自定義信號函數(shù)書寫規(guī)范(2)自定義槽函數(shù)書寫規(guī)范(3)發(fā)生信號

2、帶參數(shù)的信號和槽

四、信號與槽的連接方式1、一對一(1)一個信號連接一個槽(2)一個信號連接一個信號

2、一對多(1)一個信號連接多個槽(2)一個槽連接多個信號

五、其他說明1、信號與槽的斷開2、connect函數(shù)的解析3、Lambda表達式①[capture]標識一個Lambda表達式的開始,不可省略②(params)函數(shù)參數(shù)表③opt選項④->ret返回類型⑤{Function body}函數(shù)體

六、信號和槽的優(yōu)缺點

一、概述

在QT中,用戶和控件的每次交互過程稱為一個事件,每個事件都會發(fā)出信號,QT當中的每個控件都有接收信號的能力,對信號做出相應動作就稱之為槽

信號的本質就是事件,用戶對窗口或控件進行操作,比如單擊、雙擊,比如鍵盤輸入,會導致窗口或者控件產(chǎn)生某個特定事件,這時QT對應的窗口類會發(fā)出某個信號,以此對用戶的操作做出反應 信號的呈現(xiàn)形式是函數(shù),產(chǎn)生事件后QT框架會調用相對應的信號函數(shù) 在QT中信號的發(fā)出者是某個實例化的類對象

槽就是對信號響應的函數(shù),槽函數(shù)除了可以與一個信號關聯(lián),當信號被發(fā)射時,關聯(lián)的槽函數(shù)被自動執(zhí)行以外,其他方面與一般的普通C++函數(shù)都是一樣的

信號和槽機制底層是通過函數(shù)間的相互調用實現(xiàn)的,每個信號都可以用函數(shù)來表示,成為信號函數(shù),每個槽也可以用函數(shù)表示,稱為槽函數(shù)

信號函數(shù)和槽函數(shù)通常位于某個類中,和普通的成員函數(shù)相比它們有幾個特別之處: 信號函數(shù)用signals關鍵詞修飾,槽函數(shù)用public slots、protected slots、private slots修飾,signal和slots是QT在C++基礎上擴展的關鍵字,專門用來指明信號函數(shù)和槽函數(shù) 信號函數(shù)只需要聲明,不需要定義,而槽函數(shù)需要聲明并定義

二、信號和槽的使用

連接信號和槽

QT中QIbject類提供了靜態(tài)成員函數(shù)connect專門負責用來關聯(lián)指定的信號函數(shù)和槽函數(shù) connect函數(shù)原型:

connect(const QObject* sender,

const char* signal,

const QObject* receiver,

const char* method,

Qt::ConnectionType type = Qt::AutoConnection)

sender:信號的發(fā)送者 signal:發(fā)送的信號 receiver:信號接收者 method:接收信號的槽函數(shù) type:用于指定關聯(lián)方式,默認的關聯(lián)方式為Qt::AutoConnection

現(xiàn)在我們來寫一個按鈕,這個按鈕可以用來關閉窗口

純代碼實現(xiàn)

#include "widget.h"

#include

Widget::Widget(QWidget *parent)

: QWidget(parent)

{

QPushButton* btn = new QPushButton("關閉窗口",this);

connect(btn,&QPushButton::clicked,this,&QWidget::close);

}

Widget::~Widget()

{

}

可以實現(xiàn)點按按鈕與關閉窗口的呼應

QT窗口信號和槽演示

可視化實現(xiàn)

在自動生成的函數(shù)中描述該按鈕的槽

加一句關閉代碼,由于此時的函數(shù)的隱藏參數(shù)為該按鈕,所以直接操作就可以了

this->close();

QT關閉窗口信號與槽可視化構建

三、自定義信號和槽

1、基本語法

在QT中允許自定義信號的發(fā)送方和接收方,也就是說可以自定義信號函數(shù)和槽函數(shù),但是有一些書寫規(guī)范

(1)自定義信號函數(shù)書寫規(guī)范

自定義信號函數(shù)必須寫到signal下 返回值為void,只需聲明,無需定義 可以有參數(shù),可以發(fā)生重載

(2)自定義槽函數(shù)書寫規(guī)范

可以寫到public slots或者public以及全局下 返回值為void,需要聲明以及定義 可以有參數(shù),可以發(fā)生重載

(3)發(fā)生信號

使用emit關鍵字發(fā)送信號,emit是一個空的宏,沒有含義,只是為了提醒開發(fā)人員,并且提高代碼的可讀性

將信號和槽連接,當發(fā)送信號時,槽做出反應,也就是執(zhí)行槽函數(shù)

2、帶參數(shù)的信號和槽

上面我們展示的是無參的信號和槽,那么有參數(shù)的信號和槽是怎么工作的呢

QT的信號和槽也支持帶有參數(shù),同時可以支持重載,但是我們要求信號函數(shù)的參數(shù)列表要和對應的槽函數(shù)參數(shù)列表一致

信號的參數(shù)個數(shù)可以多于槽函數(shù)的參數(shù)個數(shù),但是槽的參數(shù)個數(shù)不能多于信號參數(shù)個數(shù),當然最好還是一致

四、信號與槽的連接方式

1、一對一

(1)一個信號連接一個槽

在上文3.1.3中就是一個信號連接一個槽的情況,這是最常用的方法

(2)一個信號連接一個信號

將按鈕的點擊信號與我的自定義信號連接,將我的自定義信號和我的自定義槽連接,這時,點擊按鈕就會觸發(fā)我的自定義槽的效果

信號連接信號,信號連接槽

2、一對多

(1)一個信號連接多個槽

一個信號和三個槽連接,觸發(fā)信號三個槽都響應

(2)一個槽連接多個信號

三個信號和一個槽連接,每觸發(fā)一個信號槽就響應一次

五、其他說明

1、信號與槽的斷開

connect可以連接信號和槽,與之對應的,disconnect可以斷開這個關系,用法與connect一致

2、connect函數(shù)的解析

在Qt5以前的版本中,connect的第二個和第四個參數(shù)是不允許任意函數(shù)的,使用的時候只能搭配著宏來使用,類似下方的代碼

connect(this,SIGNAL(mysignal(),this,SLOT(myslot()));

這樣會導致一個問題,它沒有類型的檢查,只要套上宏就可以用,如果出現(xiàn)以下情況,還是可以正常運行的,但信號與槽的參數(shù)列表不對應了,是錯誤的

connect(this,SIGNAL(mysignal(),this,SLOT(myslot(QStirng)));

當然現(xiàn)在我使用的QT5以及現(xiàn)在最新版本的QT6都沒有這個問題了,該位置的參數(shù)可以是任意類型的

3、Lambda表達式

Lambda表達式是可以直接在connect中編寫槽函數(shù)的一種方式,是C++11新增的特性,用來簡化編程工作

語法格式:

[ capture ] ( params ) opt -> ret

{

Function body;

};

參數(shù)作用capture捕獲列表params參數(shù)表opt函數(shù)選項ret返回值類型Function body函數(shù)體

①[capture]標識一個Lambda表達式的開始,不可省略

符號說明[ ]局部變量捕獲列表,Lambda表達式不能訪問外部函數(shù)體的任何局部變量[a]在函數(shù)體內用值傳遞的方式訪問a變量[&a]在函數(shù)體內用引用傳遞的方式訪問a變量[=]以值傳遞的方式使用Lambda表達式外部的所有變量[&]以引用的方式使用Lambda表達式外部的所有變量[=,&foo]foo使用引用方式傳遞,其余是值傳遞[&,foo]foo使用值傳遞方式傳遞,其余是引用方式傳遞[this]在函數(shù)內部可以使用類的成員函數(shù)和成員變量

在Lambda表達式后加一個括號表示調用

②(params)函數(shù)參數(shù)表

值傳遞和引用傳遞,省略相當于無參

③opt選項

這部分可以省略,是一個選項,常用mutable聲明

Lambda表達式外部的局部變量通過值傳遞進來時,默認為const,所以不能修改這個局部變量的拷貝,加上mutable就可以修改

mutable的使用

④->ret返回類型

可以指定Lambda表達式的返回類型,如果不指定則為編譯器自己根據(jù)代碼推導的一個返回類型,如果返回類型是void那不用寫

⑤{Function body}函數(shù)體

函數(shù)定義在這大括號中

六、信號和槽的優(yōu)缺點

優(yōu)點:低耦合,信號和槽不是綁定在一起的,改變信號函數(shù)不會影響槽函數(shù),改變槽函數(shù)也不會影響信號函數(shù),它們只在發(fā)送信號的一瞬間建立聯(lián)系

缺點:效率低,但這個低是相對于回調函數(shù)來說的,但是這個效率低的影響不大,因為對于人來說是感知不到的

今日分享就到這里~

柚子快報激活碼778899分享:學習 【QT】信號和槽

http://yzkb.51969.com/

好文推薦

評論可見,查看隱藏內容

本文內容根據(jù)網(wǎng)絡資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉載請注明,如有侵權,聯(lián)系刪除。

本文鏈接:http://m.gantiao.com.cn/post/19553787.html

發(fā)布評論

您暫未設置收款碼

請在主題配置——文章設置里上傳

掃描二維碼手機訪問

文章目錄