国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

QT之信號和槽

這篇具有很好參考價值的文章主要介紹了QT之信號和槽。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、什么是信號和槽?
我們經??吹降墓δ?,點擊一個按鈕實現(xiàn)窗口關閉。
這一過程發(fā)生了什么?是怎么實現(xiàn)的
QT之信號和槽
按鈕相當于一個信號,點擊相當于發(fā)送一個信號,窗口是個接收者,關閉窗口是個槽函數
信號:各種事件
槽:響應信號的動作

當一個按鈕(信號)被觸發(fā)(發(fā)送的信號),某個信號接收到(信號的接收者)就會做出相應的處理動作(槽函數)。他們是怎么建立連接的呢?要想實現(xiàn)這功能我們需要應用到這個api connect()來建立他們四者的關系。

二、connect的實現(xiàn)以及demo實例
1.連接函數 connect(sender, SIGNAL(signal()), receiver, SLOT(slot()));
參數說明:
參數1:信號的發(fā)送者
參數2:發(fā)送的信號(函數地址)
參數3:信號的接受者
參數4:處理的槽函數(函數的地址)

實現(xiàn)一個按下按鈕關閉窗口的demo

#include "widget.h"
#include "ui_widget.h"
#include <QPushButton>
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    //重置窗口大小
   resize(600,400);
    //創(chuàng)建一個按鈕
    QPushButton *btn = new QPushButton("按鈕",this);
    //設置到對象樹中
    btn->setParent(this);
    //移動按鈕
    btn->move(100,50);

    //點擊我的按鈕,關閉窗口
    connect(btn,QPushButton::clicked,this,QWidget::close);

}

Widget::~Widget()
{
    delete ui;
}

2、松散耦合
信號和槽的優(yōu)點:松散耦合,信號的發(fā)送端和接收端本身是沒有關聯(lián)的,通過connect連接,將兩端耦合在一起。

三、自定義信號和槽
3.1、自定義信號實現(xiàn)說明
1、寫到signal下
2、返回void
3、需要聲明,不需要實現(xiàn)
4、可以有參數,可以重載
3.2、自定義的槽函數實現(xiàn)說明
1、返回void
2、需要聲明,也需要實現(xiàn)
3、可以有參數,可以重載
4、可以寫到public slot下或者public或者全局函數(早期QT版本,必須要寫到public slots,高級版本可以寫到public或者全局函數)

1.自定義一個信號和槽函數demo實現(xiàn):下課了,小明觸發(fā)一個信號,想去打游戲,小張響應信號,一起打王者
//創(chuàng)建兩個類,Ming,Zhang  基類是QObject
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QPushButton>
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    //創(chuàng)建一個小明對象
    this->xm = new Ming;

    //創(chuàng)建一個小張對象
    this->xz = new Zhang;
    connect(xm,Ming::playGame,xz,Zhang::playLol);
    classIsOver();
}
//封裝一個下課函數,調用emit觸發(fā)玩游戲的信號
void Widget::classIsOver()
{
    emit xm->playGame();
}

widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include "zhang.h"
#include "ming.h"
#include <QWidget>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private:
    Ui::Widget *ui;
    Ming  *xm;
    Zhang *xz;
    void classIsOver();
};

#endif // WIDGET_H

ming.h
#ifndef MING_H
#define MING_H

#include <QObject>

class Ming : public QObject
{
    Q_OBJECT
public:
    explicit Ming(QObject *parent = 0);

signals:
    void playGame();

public slots:
};

#endif // MING_H

zhang.h
#ifndef ZHANG_H
#define ZHANG_H

#include <QObject>

class Zhang : public QObject
{
    Q_OBJECT
public:
    explicit Zhang(QObject *parent = 0);

signals:

public slots:
    void playLol();
};

#endif // ZHANG_H

zhang.cpp
#include "zhang.h"
#include <QDebug>
Zhang::Zhang(QObject *parent) : QObject(parent)
{

}

void Zhang::playLol()
{
    qDebug()<<"一起打王者";
}


2.自定義帶參一個信號和槽函數demo實現(xiàn):下課了,小明觸發(fā)一個信號,想去打游戲,小張響應信號,一起打王者,角色是安琪拉

//創(chuàng)建兩個類,Ming,Zhang  基類是QObject
widget.cpp
#include <QPushButton>
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    //創(chuàng)建一個小明對象
    this->xm = new Ming;

    //創(chuàng)建一個小張對象
    this->xz = new Zhang;
    //用函數指針傳遞函數地址
    void(Ming:: *mingSignal)(QString) = Ming::playGame;
    void(Zhang:: *zhangSignal)(QString) = Zhang::playLol;
    connect(xm,mingSignal,xz,zhangSignal);
    classIsOver();
}
//封裝一個下課函數,調用emit觸發(fā)玩游戲的信號
void Widget::classIsOver()
{
    emit xm->playGame("安琪拉");
}

Widget::~Widget()
{
    delete ui;
}


widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include "zhang.h"
#include "ming.h"
#include <QWidget>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private:
    Ui::Widget *ui;
    Ming  *xm;
    Zhang *xz;
    void classIsOver();
};

#endif // WIDGET_H

ming.h
#ifndef MING_H
#define MING_H

#include <QObject>

class Ming : public QObject
{
    Q_OBJECT
public:
    explicit Ming(QObject *parent = 0);

signals:
    void playGame(QString roleName);

public slots:
};

#endif // MING_H

zhang.h
#ifndef ZHANG_H
#define ZHANG_H

#include <QObject>

class Zhang : public QObject
{
    Q_OBJECT
public:
    explicit Zhang(QObject *parent = 0);

signals:

public slots:
    void playLol(QString roleName);
};

#endif // ZHANG_H

zhang.cpp
#include "zhang.h"
#include <QDebug>
Zhang::Zhang(QObject *parent) : QObject(parent)
{

}

void Zhang::playLol(QString roleName)
{
    qDebug()<<"一起打王者,角色:"<<roleName.toUtf8().data();
}


**四、QString 轉char ***
//QString轉char方法:先轉成QByteArray(.toUtf8()) .data()再轉char

  qDebug()<<"打王者,角色是:"<<roleName.toUtf8().data();
}

五、信號和槽之間的關系

1、信號可以連接信號
2、信號可以連接多個信號
3、一個信號可以連接多個槽
4、多個信號可以連接同一個槽
5、信號和槽的參數一一對應
6、信號和槽的參數個數  是不是要一致?未必,信號的參數個數可以多于槽函數的參數個數

六、Lambda表達式
C++中的Lambda表達式用于定義并創(chuàng)建匿名的函數對象,以簡化編程工作。
1.[]標識符 匿名函數
2.= 值傳遞
3.&引用傳遞
4.()參數
5.{}實現(xiàn)體
6.mutable修飾值傳遞變量,可以修改拷貝出的數據,改變不了本體
7.返回值[M]->int []

利用lambda表達式,實現(xiàn)點擊按鈕關閉窗口的demo文章來源地址http://www.zghlxwxcb.cn/news/detail-466472.html

#include "widget.h"
#include "ui_widget.h"
#include <QPushButton>
#include <QDebug>
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    resize(600,400);
     //創(chuàng)建一個按鈕
     QPushButton *btn = new QPushButton("按鈕",this);
     //設置到對象樹中
     btn->setParent(this);
     //移動按鈕
     btn->move(100,50);

     //點擊我的按鈕,關閉窗口
     connect(btn,QPushButton::clicked,this,[=](){
         this->close();
         qDebug()<<"窗口關閉";
     });
}

Widget::~Widget()
{
    delete ui;
}

到了這里,關于QT之信號和槽的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Qt 信號和槽機制

    Qt 信號和槽機制

    一. 簡介 ????????在Qt中使用信號和槽機制來完成對象之間的協(xié)同操作。簡單來說,信號和槽都是函數,比如按下窗口上的一個按鈕后想要彈出一個對話框,那么就可以將這個按鈕的單擊信號和我們定義的槽關聯(lián)起來,在這個槽中可以創(chuàng)建一個對話框,并且顯示它。這樣,

    2024年01月18日
    瀏覽(27)
  • 【Qt】信號和槽機制

    【Qt】信號和槽機制

    目錄 一、認識信號和槽 二、connect函數 三、自定義槽函數 四、自定義信號 五、帶參數的信號和槽 六、信號和槽斷開連接 七、信號和槽存在的意義 八、Lambda表達式定義槽函數 概述 在Qt中,用戶和控件的每次交互過程稱為一個事件。如\\\"用戶點擊按鈕\\\"是一個事件,\\\"用戶關閉窗

    2024年02月22日
    瀏覽(26)
  • 07.QT信號和槽-2

    07.QT信號和槽-2

    ????????在Qt中,允許?定義信號的發(fā)送?以及接收?,即可以?定義信號函數和槽函數。但是對于?定義的信號函數和槽函數有?定的書寫規(guī)范。 1.1 自定義信號 (1)?定義信號函數必須寫到\\\"signals\\\"下; (2)返回值為void,只需要聲明,不需要實現(xiàn); (3)可以有參數,

    2024年04月14日
    瀏覽(21)
  • [Qt的學習日常]--信號和槽

    [Qt的學習日常]--信號和槽

    前言 作者 :小蝸牛向前沖 名言 :我可以接受失敗,但我不能接受放棄 ??如果覺的博主的文章還不錯的話,還請 點贊,收藏,關注??支持博主。如果發(fā)現(xiàn)有問題的地方歡迎?大家在評論區(qū)指正 本期學習:什么是信號和槽,自定義槽函數和信號函數,信號和槽的傳參,斷開,

    2024年04月28日
    瀏覽(18)
  • Qt6.2教程——3.Qt信號和槽

    信號和槽是Qt中一個強大的特性,用于處理對象之間的通信。它們是一種事件處理機制,允許一個對象在某個事件發(fā)生時通知另一個對象。 定義 : 信號是一個QObject的成員函數,當某個特定事件發(fā)生時,它被自動調用。它可以與一個或多個槽關聯(lián)。 聲明 : 在Qt類的聲明中,信號

    2024年02月10日
    瀏覽(19)
  • 20221210 QT----信號和槽的使用

    20221210 QT----信號和槽的使用

    什么是信號(signal) 以QPushButton為例: (1)按下按鈕時,會觸發(fā)一個mousePressEvent事件,此時會發(fā)出一個pressed信號; (2)松開按鈕時,會觸發(fā)一個mouseReleaseEvent事件,此時會發(fā)出released和clicked信號。 事件的種類有很多,不同的事件都對應著不同的信號,當事件發(fā)生時,對應

    2024年02月15日
    瀏覽(25)
  • 02 qt基本控件及信號和槽

    02 qt基本控件及信號和槽

    功能:顯示一個字符串內容 主要接口函數 構造函數: 賦值運算符重載: 功能函數: 1)基本數據類型(int,float,double,char*)轉換成字符串 number(long , int ) : QString number(int , int ) : QString number(uint , int ) : QString number(ulong , int ) : QString number(qlonglong , int ) : QString number(qulonglong , int

    2024年02月12日
    瀏覽(21)
  • qt信號和槽避免多次連接

    qt同一個信號和槽多次連接,則槽函數 會觸發(fā)多次 (默認),可能不是我們想要的結果。 有3種方法可以解決這個問題: 因為初始化函數在在整個程序中只運行一次,所以這里面連接信號和槽,就能避免重復連接問題了。 Qt::UniqueConnection 的作用是:如果該信號以前沒連接過

    2024年02月10日
    瀏覽(47)
  • Qt快速學習(一)--對象,信號和槽

    Qt快速學習(一)--對象,信號和槽

    目錄 1.Qt概述 1.1 什么是Qt 2.2?手動創(chuàng)建 2.3?pro文件 2.4?一個最簡單的Qt應用程序 ? ? ? ?3 第一個Qt小程序 3.1 按鈕的創(chuàng)建 3.2 對象模型(對象樹) ??????3.3?Qt窗口坐標體系 4 信號和槽機制 ????????4.1 系統(tǒng)自帶的信號和槽 4.2 自定義信號和槽 ????4.3信號槽的拓展 ????

    2024年02月12日
    瀏覽(16)
  • QT基礎之——ui文件以及信號和槽機制

    QT基礎之——ui文件以及信號和槽機制

    ? ? ? ? 上一節(jié)我們講了除界面文件ui文件其他的所有文件,這一節(jié)我們來介紹一下ui文件:在文件目錄中我們能看到界面文件這一欄,點擊展開我們可以看到一個以\\\".ui\\\"結尾的文件,雙擊我們會看到如下界面: ? ? ? ? 我們在右側選中l(wèi)abel和PushButton拖入到工作臺上的窗口中,

    2024年04月08日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包