Qt:QMetaObject::connectSlotsByName实现信号槽自动关联

devtools/2024/12/23 11:05:46/

简介 

在Qt中,QMetaObject::connectSlotsByName 是一个便利的方法,它可以根据对象的对象名(objectName)自动将信号和槽连接起来。但是,要使用这个方法,必须确保:

1 控件(如按钮)有一个设置好的对象名(objectName)。
2 槽函数的命名遵循一定的规则,即槽函数名必须以 on_<objectName>_<signalName>() 的形式命名。

测试代码 

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QPushButton>
#include <QDebug>
#include <QMessageBox>class Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr): QWidget(parent){button = new QPushButton(this);button->setText("button");button->setObjectName("button");button->setGeometry(5,5,120,20);QMetaObject::connectSlotsByName(this);}~Widget(){}
private:QPushButton *button;
private slots:void on_button_clicked(){qDebug() << __func__ << __LINE__;QMessageBox::information(this,"button","clicked");}
};
#endif // WIDGET_H

 注意几个关键点:

button->setObjectName("button"); 设置了按钮的对象名为 "button"。


QMetaObject::connectSlotsByName(this); 应该传入 this 指针,因为槽函数是在 Widget 类中定义的。这意味着 Qt 会在 Widget 对象中查找名为

        on_<objectName>_<signalName>() 的槽函数。
这样,当按钮被点击时,on_button_clicked() 槽函数将被调用,输出槽函数的名称和行号到调试控制台,并显示一个消息框。

 测试结果:

小结 


http://www.ppmy.cn/devtools/144670.html

相关文章

【YashanDB知识库】数据库一主一备部署及一主两备部署时,主备手动切换方法及自动切换配置

本文内容来自YashanDB官网&#xff0c;原文内容请见 https://www.yashandb.com/newsinfo/7686588.html?templateId1718516 问题现象 数据库在正常或异常情况下&#xff0c;如何实现主备切换 问题的风险及影响 数据库主备切换若没有正确配置&#xff0c;在数据库发生主节点…

sqlite基础

在 SQLite 中&#xff0c;可以使用 CREATE INDEX 语句为表中的字段添加索引&#xff0c;以加速查询操作。 1. 为单个字段添加索引 假设有一个表 users&#xff0c;并且你想为 email 字段创建索引&#xff1a; CREATE INDEX idx_users_email ON users(email);这条语句会为 us…

门控循环单元(GRU):深度学习中的序列数据处理利器

目录 ​编辑 引言 GRU的诞生背景 GRU的核心机制 GRU的计算过程 GRU的数学公式 GRU的应用领域 代码示例&#xff1a;PyTorch中的GRU GRU与LSTM的比较 参数比较 GRU的技术发展 BiGRU&#xff08;双向GRU&#xff09; BiGRU的实现示例 GRU与CNN的结合 GRU的应用案例…

如何彻底删除电脑数据以防止隐私泄露

在数字化时代&#xff0c;个人隐私和数据安全成为了人们日益关注的问题。当我们需要处理不再需要的电脑数据时&#xff0c;如何确保这些数据被彻底删除&#xff0c;以防止隐私泄露&#xff0c;成为了一个重要的课题。本文将详细介绍几种彻底删除电脑数据的方法&#xff0c;并给…

前端篇-Content-Type 详解

Content-Type Content-Type&#xff08;MediaType&#xff09;&#xff0c;即是Internet Media Type&#xff0c;互联网媒体类型&#xff0c;也叫做MIME类型。在互联网中有成百上千中不同的数据类型&#xff0c;HTTP在传输数据对象时会为他们打上称为MIME的数据格式标签&#…

【AIGC-ChatGPT进阶副业提示词】星际占卜师:探索星象能量的艺术【限时免费阅读,一天之后自动进入进阶课程】

引言 在这个数字化的时代&#xff0c;我们创造了一个独特的角色 —— 星际占卜师。这不仅是一个简单的运势预测工具&#xff0c;更是一个融合了玄学、预言和能量解读的智能向导。通过精心设计的系统提示词和独特的画境生成机制&#xff0c;星际占卜师能够为用户带来沉浸式的占…

【ETCD】【实操篇(四)】etcd常见问题快问快答FAQ

原文&#xff1a;https://etcd.io/docs/v3.5/faq/ 目录 etcd, 一般问题配置相关部署相关操作相关性能相关其他问题 etcd, 一般问题 什么是 etcd&#xff1f; etcd 是一个一致性的分布式键值存储。它主要作为分布式系统中的独立协调服务&#xff0c;设计用于存储可以完全放入内…

[JAVA备忘录] Lambda 表达式简单介绍

目录 前言 函数式接口 Lambda 表达式使用实例 简单示例 1. 无参数&#xff0c;无返回值 2. 有参数&#xff0c;无返回值 3. 无参数&#xff0c;有返回值 4. 有参数&#xff0c;有返回值 解释&#xff1a; 集合框架 1.forEach&#xff1a;遍历集合 2.排序&#xff1…