QT 信号与槽的简单使用

news2024/11/26 19:28:16

文章目录

  • 1.通过Singloat and Slots Editor 添加信号与槽
  • 2. 通过拖动动态添加
  • 3.通过转到槽方式添加(自动关联)
  • 4. 自定义信号与槽(connect)
    • 4.1 connect方式
    • 4.2 自定义信号

1.通过Singloat and Slots Editor 添加信号与槽

点添加,然后修改对应信息
在这里插入图片描述
选择对应的button作为发送者
在这里插入图片描述
使用点击事件
在这里插入图片描述
选窗口widget做信号接收者
在这里插入图片描述
选关闭窗口作为槽函数
在这里插入图片描述
点击按钮窗口关闭
实现原理:
在设计文件对应的属性中会生成关联描述信息
在这里插入图片描述

2. 通过拖动动态添加

点Edit Singnals/Slots 操作按钮
在这里插入图片描述
点drag按钮向外拖,连接到widget,并显示出editor按钮之前在修改栏添加的信号与槽, 添加点击事件信号和关闭事件槽,运行后点击窗口关闭
在这里插入图片描述
修改完成后点击此按钮退出编辑
在这里插入图片描述

3.通过转到槽方式添加(自动关联)

右键按钮,选转到槽
在这里插入图片描述
选择点击事件
在这里插入图片描述
会在Widget 自动生成槽函数,
在这里插入图片描述点击在应用输出中打印信息
在这里插入图片描述
实现原理:qt会自动关联信号与槽
会自动生成如下格式的槽函数:on_子对象名_信号名
以上槽函数名称不对应原因是在对象查看区修改的button对象名称未保存生效,在属性编辑区还是pushButton
在这里插入图片描述
给drag按钮转到槽,生成对应的槽函数
在这里插入图片描述
在这里插入图片描述

4. 自定义信号与槽(connect)

4.1 connect方式

1、qt4 方式:
QObject::connect(sender,SIGNAL(signal()),receiver, SLOT(slot()));
使用SIGNAL 和 SLOT 这两个宏,将两个函数名转换成了字符串,connect()函数的 signal 和 slot 都是接受字符串,一旦出现连接不成功的情况是没有编译错误的(因为一切都是字符串,编译期是不检查字符串是否匹配),而是在运行时给出错误。这会增加程序的不稳定性
2. Lambda表达式
QObject::connect(sender,&Sender::signal, [=]() {/* lambda body */ });
可以直接在连接点使用匿名函数
3. qt5函数指针
QObject::connect(sender,&Sender::signal, receiver,&Receiver::slot);
类型安全,且可以利用IDE的代码补全和错误检查
4. 自动连接(UI转到槽方式)
on_<objectName>_<signalName> 命名的槽会自动连接到相应的信号

示例:
定义4个按钮
在这里插入图片描述

widget.h

#ifndef WIDGET_H
#define WIDGET_H
#include <QDebug>

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

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

private slots:
    void on_drag_clicked();
    void on_clicked1();
    void on_clicked3();
    void on_conn4_clicked();


private:
    Ui::Widget *ui;
};
#endif // WIDGET_H


widget.c
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    // 在构造函数中是一种常见的做法,因为这样可以确保在对象被创建并初始化之后,信号和槽的连接就已经建立好了。
    //这样,当信号被触发时,相应的槽函数可以立即被调用。
    // this,是当前的Widget对象(当前窗口对象)
    // qt4
    QObject::connect(ui->conn1, SIGNAL(clicked()), this, SLOT(on_clicked1()));
    // lambda   [=] 捕获列表,这表示它按值捕获所有外部变量, 信号接受对象为当前对象
    QObject::connect(ui->conn2, &QPushButton::clicked, [=]() {
        qDebug() << "conn2";
    });
    // qt5
    QObject::connect(ui->conn3, &QPushButton::clicked, this, &Widget::on_clicked3);
}

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

void Widget::on_clicked1()
{
    qDebug() << "conn1";
}

void Widget::on_clicked3()
{
    qDebug() << "conn3";
}
// 自动连接
void Widget::on_conn4_clicked()
{
    qDebug() << "conn4";
}

void Widget::on_drag_clicked()
{

}

运行结果:
在这里插入图片描述

4.2 自定义信号

新建Form, 在其中定义信号和槽
在这里插入图片描述
槽函数实现
在这里插入图片描述
在构造中连接和发送信号
在这里插入图片描述
修改主函数启动窗口
在这里插入图片描述
结果: widget 打开又关闭,控制台打印相关参数和信息
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1587584.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pandas(day10)

一. 各各品类产品交易指数对比 获取文件名 files glob.glob("./*.xlsx")# 读取数据&#xff0c;并改列名&#xff0c;增加一列 品牌 dfs [] for f in files:t f[2:4]df pd.read_excel(f)df["品牌"] tif t "拜耳":df.rename(columns{"…

.NET MVC API Swagger 自动生成API文档入坑

开发环境 Win10 VS2022 .NET8.0 1.从NuGet添加Swagger 在解决方案资源管理器中右键单击项目>管理 NuGet 包 将包源设置为“nuget.org” 确保启用“包括预发行”选项 在搜索框中输入“Swashbuckle.AspNetCore” 从“浏览”选项卡中选择最新的“Swashbuckle.AspNetCore”包&a…

C++ | Leetcode C++题解之第21题合并两个有序链表

题解&#xff1a; 题解&#xff1a; class Solution { public:ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {ListNode* preHead new ListNode(-1);ListNode* prev preHead;while (l1 ! nullptr && l2 ! nullptr) {if (l1->val < l2->val) {prev-…

OJ刷题日记:1、双指针(1)

目录 1、283.移动零 2、1089.复写零 3、202.快乐数 1、283.移动零 题目&#xff1a; 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 …

PC-3000 Portable III、PC-3000 Express、PC-3000 UDMA 有哪些区别?

天津鸿萌科贸发展有限公司从事数据安全业务20余年&#xff0c;在数据恢复、数据取证、数据备份等领域有丰富的案例经验、前沿专业技术及良好的行业口碑。同时&#xff0c;公司面向取证机构及数据恢复公司&#xff0c;提供数据恢复实验室建设方案&#xff0c;包含数据恢复硬件设…

EEPROM读写案例(以AT24C02为例)

本篇文章主要是在学习单片机串行接口时的学习经历&#xff0c;主要侧重于驱动程序的讲解。下文将通过ESP32S3、STM32两款MCU进行编写驱动案例。 1、AT24C02简要说明 AT24C02是美国微芯科技公司生产的电擦写式只读存储器系列中的一款&#xff0c;其容量为2K位&#xff08;即256字…

ios包上架系列 四、虚拟机涉及网站

一、网站相关 苹果开发者平台 https://developer.apple.com/ 谷歌邮箱 https://mail.google.com/mail/u/0/#inbox 微云在线或者安装QQ https://www.weiyun.com/disk 下载下的为zip文件&#xff0c;需要复制里面的内容出来使用 二、环境配置 1、ios-upload 配置&#x…

LeetCode 最长重复子串的更换问题

LeetCode 最长重复子串的更换问题 在处理字符串问题时&#xff0c;我们经常会遇到一些具有挑战性的问题&#xff0c;比如今天的这个问题&#xff1a;给定一个字符串 s 和一个整数 k&#xff0c;我们的任务是找到可以通过最多更换 k 个字符来形成的最长重复子串的长度。 我的解…

【HDFS存储】Java语言实现

Hadoop生态系统中包含多种与其相关联的技术应用&#xff0c;主要包括但不限于HDFS HDFS&#xff08;Hadoop Distributed File System&#xff09;&#xff1a;作为一个高度可靠、高吞吐量的分布式文件系统&#xff0c;它是Hadoop核心技术之一&#xff0c;用于存储海量数据。 J…

如何停止 Win11 自动更新?如何彻底关闭 Windows 更新呢?

如何停止 Win11 自动更新&#xff1f;如何彻底关闭 Windows 更新呢&#xff1f; 段子手168 我们在使用电脑时&#xff0c;有时并不需要 windows 频繁更新系统&#xff0c; 这样可能会使你的 C 盘突然爆满或者系统启动缓慢&#xff0c; 那么如何彻底关闭 Windows 更新呢&#…

第24次修改了可删除可持久保存的前端html备忘录:文本编辑框不再隐藏,又增加了哔哩哔哩搜索和必应搜索

第24次修改了可删除可持久保存的前端html备忘录:文本编辑框不再隐藏&#xff0c;又增加了哔哩哔哩搜索和必应搜索. <!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8"><meta name"viewport" content"…

ETL工具-nifi干货系列 第九讲 处理器EvaluateJsonPath,根据JsonPath提取字段

1、其实这一节课本来按照计划一起学习RouteOnAttribute处理器&#xff08;相当于java中的ifelse&#xff0c;switch case 控制语句&#xff09;&#xff0c;但是在学习的过程中遇到了一些问题。RouteOnAttribute 需要依赖处理器EvaluateJsonPath&#xff0c;所以本节课我们一起…

ESP8266开发

1esp8266Wifi连接,通过手机控制点灯 1.下载Arduino,编程 2.下载blinker手机APP。 3.下载blinker库。https://arduino.me/s/blinker-arduino?aid=711 4.打开编程工具 Arduino,加载blinker库 5. 打开库里面的例程,基于例程开发。 blinker-library-0.3.10230510\blinker-…

JavaSE——常用API进阶二(2/8)-BigDecimal(BigDecimal的常见构造器、常用方法,用法示例,使用规范)

目录 BigDecimal BigDecimal的常见构造器、常用方法 用法示例 使用规范 在进行浮点型运算时&#xff0c;直接使用“ - * / ”可能会出现运算结果失真&#xff0c;例如&#xff1a; System.out.println(0.1 0.2); System.out.println(1.0 - 0.32); System.out.println(1.…

【Ubuntu】 Github Readme导入GIF

1.工具安装 我们使用 ffmpeg 软件来完成转换工作1.1 安装命令 sudo add-apt-repository ppa:jonathonf/ffmpeg-3sudo apt-get updatesudo apt-get install ffmpeg1.2 转换命令 &#xff08;1&#xff09;直接转换命令&#xff1a; ffmpeg -i out.mp4 out.gif(2) 带参数命令&…

哨兵-1A与DInSAR技术监测尼泊尔地震前后地表形变

2015年4月25号&#xff0c;尼泊尔发生里氏7.8级地震&#xff0c;超过5000人伤亡和几百万人受到影响。大量的卫星影像支持地震救援。地理学家利用卫星影像量测地震对陆地的影响。 Sentinel-1A是欧洲委员会发起的哥白尼环境监测计划中的第一颗卫星。可获取全天候的数据&#xff0…

大模型+交通治理,高德地图“评诊治”系统迎来全新升级

近日&#xff0c;由中国道路交通安全协会主办的第十四届中国国际道路交通安全产品博览会暨公安交警警用装备展(以下简称交博会)在厦门国际会展中心开幕&#xff0c;会上高德地图发布了全新升级的城市交通“评诊治”智能决策SaaS系统&#xff0c;以助力城市交通的可持续、精细化…

水利自动化控制系统平台介绍

水利自动化控制系统平台介绍 在当今社会&#xff0c;水资源的管理和保护日益成为全球关注的重要议题。随着科技的进步和信息化的发展&#xff0c;水利监测系统作为一种集成了现代信息技术、自动化控制技术以及环境监测技术的综合性平台&#xff0c;正在逐步改变传统的水利管理模…

Oracle 常用命令总结

文章目录 一、数据库启动 & 关闭&查看1、启动数据库2、关闭数据库3、连接数据库4、查看数据库名5、查看实例 二、用户1、创建用户2、重置密码3、账户解锁4、账号赋权5、账户撤销权限6、删除用户7、查询所有用户&#xff08;DBA账号执行&#xff09;8、查看当前用户连接…

卫星影像联合无人机实现农业保险全生命周期监管监测

随着科技的进步&#xff0c;农业保险监管系统的发展日新月异。特别是近年来&#xff0c;随着卫星技术与无人机技术的结合&#xff0c;为农业保险监管系统带来了前所未有的革新。本文将深入探讨如何利用卫星与无人机方案构建高效的农业保险监管系统&#xff0c;并结合实例进行说…