QT 自定义信号

自定义信号需要遵循的规则

  • 信号是类的成员函数,并且返回类型必须是 void 类型
  • 信号函数只需要声明, 不需要定义(没有函数体实现)
  • 参数可以随意指定, 信号也支持重载
  • 信号需要使用 signals 关键字进行声明, 使用方法类似于public等关键字
  • 在程序中发送自定义信号: 发送信号的本质就是调用信号函数

创建信号:

cpp 复制代码
signals:
    void mysignals();

信号发送

cpp 复制代码
emit mysignals();	//发送信号

创建槽函数

cpp 复制代码
private slots:
    void addvalue();

信号绑定

完成连接connect的过程包括以下内容:

  • 信号的发送(信号发出者)
  • 信号发送的具体内容(发出的信号)
  • 信号的接受(信号接收者)
  • 信号的处理(信号槽函数)

信号槽的优点: 松散耦合

信号的发送方和接受方本身没有关联(发送端的信号不一定触发接收端处理,接收端也不一定要接收信号后才完成操作),只是通过连接connect将两端耦合在一起。

cpp 复制代码
connect(this,SIGNAL(mysignals()),this,SLOT(addvalue()));

以检测一个变量值改变的信号为例子:

mainwindows.h

cpp 复制代码
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

signals:
    void valueadd();

private:
    Ui::MainWindow *ui;
    void add();
    int value=0;

private slots:
    void addvalue();
    void on_pushButton_clicked();
};
#endif // MAINWINDOW_H

mainwindows.cpp

cpp 复制代码
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QDebug"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(this,SIGNAL(valueadd()),this,SLOT(addvalue()));
    //add();
}

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

//void MainWindow::add()
//{
//    value++;
//    emit valueadd();
//}

void MainWindow::addvalue()
{
   qDebug()<<value;
}


void MainWindow::on_pushButton_clicked()
{
    value++;
    emit valueadd();
}

实现的功能是点击按钮后value变量的值增加,然后发送valueadd信号,输出value的值

相关推荐
強云2 小时前
界面架构- MVP(Qt)
qt·架构
Merokes8 小时前
关于Gstreamer+MPP硬件加速推流问题:视频输入video0被占用
c++·音视频·rk3588
请来次降维打击!!!9 小时前
优选算法系列(5.位运算)
java·前端·c++·算法
别NULL9 小时前
机试题——统计最少媒体包发送源个数
c++·算法·媒体
嘤国大力士9 小时前
C++11&QT复习 (七)
java·c++·qt
背影疾风9 小时前
C++学习之路:指针基础
c++·学习
x-cmd10 小时前
[250331] Paozhu 发布 1.9.0:C++ Web 框架,比肩脚本语言 | DeaDBeeF 播放器发布 1.10.0
android·linux·开发语言·c++·web·音乐播放器·脚本语言
myloveasuka10 小时前
[Linux]从硬件到软件理解操作系统
linux·开发语言·c++
UpUpUp……10 小时前
特殊类的设计/单例模式
开发语言·c++·笔记·单例模式
苏克贝塔10 小时前
CMake学习--Window下VSCode 中 CMake C++ 代码调试操作方法
c++·vscode·学习