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_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 打开又关闭,控制台打印相关参数和信息
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

突破像素限制,尽显照片细腻之美——Topaz Gigapixel AI for Mac/Win

在这个数字化的时代&#xff0c;我们都热爱用照片记录生活中的美好瞬间。然而&#xff0c;有时候我们会发现&#xff0c;由于各种原因&#xff0c;照片的像素可能无法满足我们的需求。这时候&#xff0c;Topaz Gigapixel AI for Mac/Win 这款强大的照片放大工具应运而生。 Top…

open c UF_MODL_create_simple_hole 识别放置平面 UF_MODL_ask_face_data

在BLOCK上创建一个简单孔 UF_FEATURE_SIGN sign UF_NULLSIGN;double block_orig[3] { -25.0,-25.0,0.0 };char* block_len[3] { "50","50","30" };tag_t blk_obj;UF_MODL_create_block1(sign, block_orig, block_len, &blk_obj);tag_t bo…

PSPICE、Multisim和Saber哪个更适合电路仿真?没想到是它

PSPICE、Multisim和Saber这三个软件都是非常流行的模拟电路仿真工具&#xff0c;它们各自有各自的优缺点&#xff0c;我简单讲一下&#xff1a; PSPICE&#xff1a; 优点&#xff1a; 精度高&#xff1a;PSPICE是专业的电路仿真软件&#xff0c;可以进行高精度的模拟电路仿真…

兮兮牧场养殖小游戏积分兑换互动商城引流模式

刚注册的新会员必须要进入牧场才能激活所有功能 一、获得动物的途径的方式 第一种是邀请好友注册获得&#xff0c;第二种是看广告获得 邀诘好友注册获得动物明细: 1、从兮兮牧场的邀请好友的链接去邀请好友才能获得&#xff0c;其他邀请码无效 2、注册赠送小鸡一只; 3、邀…

基于Springboot + vue + MySQL +Tomcat 社区医院管理服务系统 (含源码)

目录 &#x1f4da; 前言 &#x1f4d1;摘要 &#x1f4d1;系统架构 &#x1f4da; 数据库设计 &#x1f4ac; 用户注册实体属性图 &#x1f4ac; 医生实体属性图 &#x1f4da; 系统功能的具体实现 &#x1f4ac; 前台模块 用户注册 医生信息 &#x1f4ac; 后台功能模…

Docker部署SpringBoot+Vue前后端分离项目

文章目录 1. 安装Docker1. 1 卸载旧版Docker1.2 配置yum仓库1.3 安装Docker1.4 添加自启动配置1.5 配置阿里云镜像加速1.6 测试 2. 安装Nginx2.1 拉取镜像2.2 安装Nginx2.3 测试 3. 安装MySQL3.1 拉取镜像3.2 安装MySQL3.3 连接MySQL 4. 部署SpringBoot项目4.1 Maven打包4.2 编…

centos7安装 on-my-zsh

如下&#x1f447; yum install -y zsh chsh -s /bin/zsh yum install -y git sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)" 重启即可生效啦~

Windows搭建LightPicture图片管理网站结合内网穿透实现公网访问本地图片

文章目录 1.前言2. Lightpicture网站搭建2.1. Lightpicture下载和安装2.2. Lightpicture网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 现在的手机越来越先进&#xff0c;功能也越来越多&#xff0c;而手机…

【LAMMPS学习】八、基础知识(2.2)类型标签

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语&#xff0c;以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…

车载数据终端丨车载平板丨车载平板电脑为何在叉车上使用

车载终端平板是一种专门设计用于车辆和运输行业的电子设备。它们通常被安装在叉车、卡车、拖车和其他机动车辆上&#xff0c;以便驾驶员可以更方便地管理和控制运输任务。 为了了解车载终端平板为何能够在叉车上使用&#xff0c;我们需要考虑以下几个方面&#xff1a; 物理结构…

HarmonyOS4 页面路由

Index.ets: import router from ohos.routerclass RouterInfo {// 页面路径url: string// 页面标题title: stringconstructor(url: string, title: string) {this.url urlthis.title title} }Entry // 入口組件 Component struct Index {State message: string 页面列表// …

StylizedGS: Controllable Stylization for 3D Gaussian Splatting

StylizedGS: Controllable Stylization for 3D Gaussian Splatting StylizedGS&#xff1a;3D高斯溅射的可控样式化 Dingxi Zhang, Zhuoxun Chen, Yu-Jie Yuan, Fang-Lue Zhang, Zhenliang He, Shiguang Shan, and Lin Gao1 张定西&#xff0c;陈卓勋&#xff0c;袁玉洁&#x…

LabVIEW无线快速存取记录器(WQAR)测试平台

LabVIEW无线快速存取记录器&#xff08;WQAR&#xff09;测试平台 随着民用航空业的迅速发展&#xff0c;航空安全的保障日益成为公众和专业领域的关注焦点。无线快速存取记录器&#xff08;WirelessQuick Access Recorder, WQAR&#xff09;作为记录飞行数据、监控飞行品质的…

Kafka—ISR机制

ISR机制 Kafka 中的 ISR&#xff08;In-Sync Replicas&#xff09;机制是一种用于确保数据可靠性和一致性的重要机制。ISR 是一组副本&#xff0c;它包括分区的领导者&#xff08;Leader&#xff09;和追随者&#xff08;Follower&#xff09;副本&#xff0c;这些副本与领导者…

Redis(二十)五大经典类型源码

文章目录 面试题源码核心Redis基本的数据结构(骨架)Redis数据库的实现Redis服务端和客户端实现其他 K-V实现怎样实现键值对(key-value)数据库的传统五大基本数据类型和新五大数据类型 5大数据结构底层C语言源码分析示例redisObject五大数据结构解析定义Debug Object keyString …

用Python接单,一单800块虽然不多,但真的能够挣!

当今收入低于5000的人至少占到40%&#xff0c;完全不够养活一家人&#xff0c;而且很多小伙伴其实空余时间比较多&#xff0c;特别是大学生&#xff0c;零花钱又不够花&#xff0c;都想靠业余时间找点轻松的活增加收入。但是缺没门路&#xff0c;为此结合我多年编程开发经验&am…

【React】Ant Design社区扩展库之分割面板:react-resizable-panels

主角&#xff1a;react-resizable-panels 简介&#xff1a;来之Ant Design官方文档社区精选组件 1、效果 2、环境 react-resizable-panels: ^2.0.16next: 14.1.3react: ^18 3、安装 # npm npm install react-resizable-panels# yarn yarn add react-resizable-panels# pnpm …

python 如何向上取整

python向上取整 方法&#xff1a; Python match.ceil函数 ceil(x)函数是向上取整&#xff0c;即取大于等于x的最接近整数。 import math math.ceil(float(1)/2)

品牌软文怎么写?媒介盒子分享

品牌软文是品牌传播的主要方式。高质量的品牌软文能够帮助企业塑造正面的品牌形象&#xff0c;提高品牌知名度和影响力&#xff0c;扩大目标消费者范围。接下来媒介盒子就和大家聊聊&#xff1a;如何写好品牌软文。 一、 确立品牌独特点 品牌独特性是品牌能够与行业内其他品牌…

Offline RL : Efficient Planning in a Compact Latent Action Space

ICLR 2023 paper Intro 采用Transformer架构的Planning方法对马尔可夫序列重构,(et. TT)在面对高维状态动作空间&#xff0c;容易面对计算复杂度高的问题。本文提出TAP算法&#xff0c;基于Transformer的VQ-VAE&#xff0c;利用提取的状态动作在隐空间的低微特征进行Planning…