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的值

相关推荐
十五年专注C++开发几秒前
ANTLR4: CORBA IDL、C++ 语法文件分析利器
java·开发语言·c++·antlr4
Mortalbreeze9 分钟前
C++11 ---- 引用折叠、完美转发、可变模板参数、emplace系列接口
开发语言·c++
星恒随风9 分钟前
C++ 内存管理详解:从内存分区、malloc/free 到 new/delete
开发语言·c++·笔记·学习
C+++Python10 分钟前
C++ 常量全面讲解
java·开发语言·c++
江屿风10 分钟前
C++图论基础拓扑排序经典OJ题流食般投喂
开发语言·c++·笔记·算法·图论
C+-C资深大佬14 分钟前
C++ 数字与字符串互转
java·c++·算法
小灰灰搞电子17 分钟前
C++ boost::asio 详解:网络编程领域的“瑞士军刀“
网络·c++·boost
玖玥拾9 小时前
C/C++ 基础笔记(十四)多态与模板编程
c语言·c++·多态·模板
Roann_seo%10 小时前
C++文件操作完全指南:从文本读写到二进制文件处理
开发语言·c++
坚果派·白晓明11 小时前
【鸿蒙PC】SDL3 适配:AtomCode + Skills 快速集成 NAPI 测试工具
c++·华为·ai编程·harmonyos·atomcode