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

相关推荐
蒸蒸yyyyzwd7 分钟前
cpp 选手备战秋招学习笔记 day23
c++·求职招聘
.YM.Z12 分钟前
C++ STL 容器深度剖析:vector 与 list 的模拟实现及对比
开发语言·c++·vector·list
小白不想画工图37 分钟前
银河麒麟V10系统安装QT5.12
linux·开发语言·qt·银河麒麟
mengzhi啊2 小时前
QEventLoop loop配合loop.exec();替代while(1)。电脑cpu占用为0,使用while(1)cpu占用率100%
c++·qt
HugoStudio_SWAN2 小时前
洛谷 P1319 / P1320 压缩技术——同一枚硬币的正反面
c++·学习·程序人生·算法
小小晓.2 小时前
C++单例模式万字详解:6种实现演进+线程安全彻底解决+CRTP终极模板
c++·单例模式
j7~3 小时前
【C++11】C++11 新特性全套详解(列表初始化、右值引用、lambda 表达式、function 与 bind 包装器等)
c++·右值引用·lambda表达式·可变参数模板·移动语义·包装器·c++11发展史
无小道4 小时前
C/C++——可变参数
c语言·开发语言·c++·可变参数
hele_two4 小时前
C++模拟蚁群(二)
c++·算法·数学建模·图形渲染
WK100%4 小时前
LeetCode双题:滑动窗口破解最小子数组
c++·经验分享·笔记·算法