QT 信号与槽的简单使用

文章目录

  • 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_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic: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_Hwidget.c
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 在构造函数中是一种常见的做法,因为这样可以确保在对象被创建并初始化之后,信号和槽的连接就已经建立好了。//这样,当信号被触发时,相应的槽函数可以立即被调用。// this,是当前的Widget对象(当前窗口对象)// qt4QObject::connect(ui->conn1, SIGNAL(clicked()), this, SLOT(on_clicked1()));// lambda   [=] 捕获列表,这表示它按值捕获所有外部变量, 信号接受对象为当前对象QObject::connect(ui->conn2, &QPushButton::clicked, [=]() {qDebug() << "conn2";});// qt5QObject::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.mzph.cn/news/809485.shtml

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

相关文章

nginx反向代理conf

打开nginx配置。 对登录功能测试完毕后&#xff0c;接下来&#xff0c;我们思考一个问题&#xff1a;前端发送的请求&#xff0c;是如何请求到后端服务的&#xff1f; 前端请求地址&#xff1a;http://localhost/api/employee/login 后端接口地址&#xff1a;http://localho…

学习Rust的第三天:猜谜游戏

Welcome to the third day of learning rust, I am referring to the book “The Rust Programming Language” by Steve Klabnik. Today we build a guessing game in rust. 欢迎来到学习Rust的第三天&#xff0c;基于Steve Klabnik的《The Rust Programming Language》一书。…

云架构(四)异步请求-应答模式

Asynchronous Request-Reply pattern - Azure Architecture Center | Microsoft Learn 把后台处理和前端解耦&#xff0c;后台处理需要异步处理&#xff0c;但是也需要给前端一个清晰的回应。 背景和问题 在现代应用开发中&#xff0c;代码通常在浏览器中运行&#xff0c;依…

【C#】 删除首/尾部字符

代码 static void Main(string[] args){string str "123abc";string strdelete "abc";string str1 str.Trim(1);string strc str1.Trim(c);string str11 str1.TrimStart(1);string strcc str1.TrimEnd(c);string strabc str.Trim(strdelete.ToCharA…

Sorting Algorithms in Python (排序算法)

本篇文章主要介绍几种经典排序算法&#xff1a;冒泡排序、快速排序、选择排序、堆排序、插入排序、希尔排序、归并排序、桶排序和基数排序。并给出用python实现的算法代码。 目录 一、冒泡排序 二、快速排序 三、选择排序 四、堆排序 五、插入排序 六、希尔排序 七、归…

(非技术) 基因遗传相关知识学习笔记

目录 一、基因遗传名词解释 二、什么叫显性遗传和隐性遗传&#xff1f; 三、如何确定遗传性质呢&#xff1f;是显性还是隐性&#xff1f; 四、常规例子1&#xff1a; 五、常规例子2&#xff1a; 六、实际案例&#xff1a; 七、思考题&#xff1a; 八、参考&#xff1a; …

智慧InSAR专题———模拟数据实现现实场景异常形变点识别(项目讲解)

续上篇 文章目录 &#xff08;一项技术的复现&#xff0c;我们应该有打破砂锅问到底的态度&#xff0c;我找到了这篇文章的一些灵感来源&#xff0c;包括算法和编程以及专业知识等&#xff0c;对我而言也是受益匪浅&#xff09;1. 数据准备1.1 A deep learning approach to de…

MySQL选择普通索引还是唯一索引(2/16)

普通索引和唯一索引 基本概述 MySQL中可以创建普通索引与唯一索引&#xff0c;这两种索引的区别是&#xff1a; 普通索引&#xff08;Non-Unique Index&#xff09;&#xff0c;也称为非唯一索引&#xff0c;它允许索引中的条目具有重复的键值。普通索引的主要目的是加快查询…

Android MTK 屏下指纹的调试过程记录

Demo链接 -----> https://download.csdn.net/download/u011694328/89118346 一些品牌手机都有了屏下指纹的功能&#xff0c;还算是个比较新颖的功能&#xff0c;最近有项目需要使用屏下指纹&#xff0c; 使用的是汇顶&#xff08;Goodix&#xff09;的指纹方案&#xff0c…

架构设计-订单系统之业务的设计与实现

一、背景简介 订单业务一直都是系统研发中的核心模块&#xff0c;订单的产生过程&#xff0c;与系统中的很多模块都会高度关联&#xff0c;比如账户体系、支付中心、运营管理等&#xff0c;即便单看订单本身&#xff0c;也足够的复杂&#xff1b; 业务在发展的过程中&#xff…

Go gorm库(详细版)

目录 01. 什么是ORM 02. 环境搭建 03. 连接数据库 高级设置 gorm 的命名策略 创建表 日志显示 04. 模型定义 定义一张表 自动生成表结构 修改表字段大小 字段标签 05. 单表查询 5.1 表结构 5.2 添加单条记录 5.3 批量插入 5.4 单条数据查询 5.5 根据主键查询…

Vue3学习03 pinia

Vue3学习 pinia pinia一个简单效果搭建 pinia 环境存储读取数据示例 修改数据 (三种方式)storeToRefsgetters$subscribestore组合式写法 pinia 在vue2中使用vuex&#xff0c;在vue3中使用pinia。 集中式状态管理&#xff0c;&#xff08;状态数据&#xff09;。多个组件共享数…

多态【C/C++复习版】

目录 一、多态是什么&#xff1f;如何实现&#xff1f; 二、 什么是重写&#xff1f;有什么特点&#xff1f; 三、什么是协变&#xff1f; 四、析构函数能实现多态吗&#xff1f;为什么要实现&#xff1f; 五、override和final的作用是什么&#xff1f; 六、 多态的原理是…

Linux下网络编程基础知识--协议

网络基础 这一个课程的笔记 相关文章 协议 Socket编程 高并发服务器实现 线程池 协议 一组规则, 数据传输和数据的解释的规则。 比如说依次发送文件的文件名, 文件的大小, 以及实际的文件, 这样规定发送一个文件的顺序以及发送的每一个部分的格式等可以算是一种协议 型协议 …

防火墙用户管理技术——AAA

目录 一.AAA功能 (1).认证方式 (2).授权方式 (3).计费方式 二.RADUIUS协议 三.用户组织架构及管理 管理员认证登录方式 1.console 2.web 3.telnet 4.ssh 5.ftp 四.认证方式 五.AAA远程登录 1.端口添加IP地址达到互通 2.AAA视图进行配置 3.结果​编辑 一.AAA功能…

Android源码解析之截屏事件流程

今天这篇文章我们主要讲一下Android系统中的截屏事件处理流程。用过android系统手机的同学应该都知道&#xff0c;一般的android手机按下音量减少键和电源按键就会触发截屏事件&#xff08;国内定制机做个修改的这里就不做考虑了&#xff09;。那么这里的截屏事件是如何触发的呢…

【Redis深度解析】揭秘Cluster(集群):原理、机制与实战优化

Redis Cluster是Redis官方提供的分布式解决方案&#xff0c;通过数据分片与节点间通信机制&#xff0c;实现了水平扩展、高可用与数据容灾。本文将深入剖析Redis Cluster的工作原理、核心机制&#xff0c;并结合实战经验分享优化策略&#xff0c;为您打造坚实可靠的Redis分布式…

双数据库的安装

双MySQL的安装 【0】前言 ​ 本地已经安装过mysql5.1版本&#xff0c;应项目需求需要安装mysql5.7版本&#xff1b; ​ 官方网站下载对应版本&#xff1a;https://downloads.mysql.com/archives/community/ 【1】压缩包下载完成后解压至本地磁盘 【2】进入根目录下bin文件夹…

Flask基于flask_login实现登录、验证码

flask_login 是一个 Flask 扩展&#xff0c;用于在 Flask web 应用中实现用户会话管理。它允许你跟踪哪些用户已经登录&#xff0c;并管理他们的登录状态。flask_login 提供了用户认证的基础结构&#xff0c;但具体的用户验证&#xff08;如用户名和密码检查&#xff09;和存储…

泽众Testone自动化测试平台,测试用例支持单个调试执行,同步查看执行日志

泽众Testone自动化测试平台之前版本&#xff0c;测试用例批量和单个执行&#xff0c;必须要通过测试集操作执行&#xff0c;操作略繁琐&#xff0c;我们通过本轮优化升级&#xff0c;测试用例直接可以单个调试执行&#xff0c;同步查看执行日志&#xff0c;操作上去繁就简&…