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

相关推荐
Amnesia0_01 天前
类型转换和特殊类
开发语言·c++
格林威1 天前
C++ 工业视觉实战:Bayer 图转 RGB 的 3 种核心算法(邻域平均、双线性、OpenCV 源码级优化)
开发语言·c++·人工智能·opencv·算法·计算机视觉·工业相机
2401_851272991 天前
C++中的模板方法模式
开发语言·c++·算法
2401_894241921 天前
C++中的策略模式进阶
开发语言·c++·算法
.select.1 天前
C++ 右值引用
开发语言·c++
2401_874732531 天前
C++中的装饰器模式
开发语言·c++·算法
j_xxx404_1 天前
力扣--分治(快速排序)算法题II:数组中的第K个最大元素(Top K问题),LCR159.库存管理III
数据结构·c++·算法·leetcode
ysa0510301 天前
运用map优化多次查询【Kadomatsu 子序列】
数据结构·c++·笔记·算法
TTTrees1 天前
C++学习笔记(31):智能指针(shared_ptr)
c++
_饭团1 天前
C 语言内存函数全解析:从 memcpy 到 memcmp 的使用与模拟实现
c语言·开发语言·c++·学习·算法·面试·改行学it