当前位置: 首页 > news >正文

C++Qt——自定义信号与槽

自定义信号与槽

自定义信号与槽是实现对象间通信的一种机制,比如按钮和窗口间的通信。

一、定义信号

Signal关键字声明的类成员函数。不需要实现,只需要声明。

signals:void mySignals();//定义信号,不用实现

二、定义槽

可以使任何普通成员函数,类定义中使用关键字slot标识,有返回类型,可接受参数。参数需要与信号发出的参数类型匹配。
信号带参数的情况下,槽可以无参数。

private slots:void mySlots();//头文件定义槽void Widget::mySlots()//.cpp实现
{std::cout << "mySlot" << std::endl;
}

三、连接信号与槽

使用QObject::connect

connect(this,SIGNAL(mySignals()),this,SLOT(mySlots()));

四、发射信号

使用emit关键字发射信号

 emit mySignals();//发送信号,可见

五、完整代码

无参与有参

在这里插入代码片#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <iostream>
#include <QDebug>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();signals:void mySignals();//定义信号,不用实现void mySignalsWithPara(int value);//带参数
private slots:void mySlots();//定义槽void mySlotsWithPara(int value);//带参数private:Ui::Widget *ui;
};
#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);connect(this,SIGNAL(mySignals()),this,SLOT(mySlots()));connect(this,SIGNAL(mySignalsWithPara(int)),this,SLOT(mySlotsWithPara(int)));emit mySignals();//发送信号,可见emit mySignalsWithPara(100);//发送信号,可见}Widget::~Widget()
{delete ui;
}void Widget::mySlots()
{std::cout << "mySlot" << std::endl;
}void Widget::mySlotsWithPara(int value)
{
//    std::cout << "mySlotWithPara  " << std::endl;//  std::cout <<  value << std::endl;qDebug() << "mySlotWithPara  " ;q     Debug() <<  value ;}
http://www.lryc.cn/news/302188.html

相关文章:

  • 提高项目的性能和响应速度的方法
  • QT学习事件
  • 第13章 网络 Page818 UDP(和TCP的比较)
  • EMQX Enterprise 5.4 发布:OpenTelemetry 分布式追踪、OCPP 网关、Confluent 集成支持
  • 记录 | C++ cout.setf(ios::fixed)
  • Eclipse 创建 Hello World 工程
  • 【前端工程化面试题】vite热更新原理
  • 【leetcode】判断二叉树是否完全二叉树
  • Java多线程系列——内存模型JMM
  • 深入理解 Vue3 中的 setup 函数
  • 【QT+QGIS跨平台编译】之三十六:【RasterLite2+Qt跨平台编译】(一套代码、一套框架,跨平台编译)
  • java面试题:分布式和微服务的区别
  • GO语言的变量与常量
  • java面试多线程篇
  • Anaconda + VS Code 的安装与使用
  • Python爬虫html网址实战笔记
  • C++ 调用js 脚本
  • Vscode python pyside6 制作视频播放器
  • 纯前端低代码平台demo,vue框架,nodejs,简单的pm2纯前端部署实践
  • 致创新者:聚焦目标,而非问题
  • javaSE和javaEE区别
  • 安装VMware+安装Linux
  • session和cookie理解
  • Springboot医院信息管理系统源码 带电子病历和LIS Saas应用+前后端分离+B/S架构
  • LeetCode.589. N 叉树的前序遍历
  • C++ Webserver从零开始:配置环境(九)——下载github的项目进行测试
  • 2024前端面试准备之TypeScript篇(一)
  • kali无线渗透之蓝牙攻击与原理
  • 【开源】基于JAVA+Vue+SpringBoot的就医保险管理系统
  • 德国vetter krantechnik起重机安装操作和维护说明包含电路图装配图