“QT 快速上手指南“ 之 计算器(三)信号与槽,connect 函数,QString

news2024/11/16 17:40:32

文章目录

  • 前言
  • 一、什么是信号与槽?
  • 二、QObject::connect 函数
  • 三、QT 中的字符串类 QString
      • 1. 创建和初始化字符串:
      • 2. 字符串的拼接和添加
      • 3. 字符串的查找和替换
      • 4. 字符串的分割和处理
  • 总结


前言

QT 中 信号 与 槽机制(Signal and Slot)是QT GUI 编程中的一项非常强大的功能。简单来说,它是一种事件处理机制,可以实现类与类之间的通信,并且可以解耦合应用程序。本文将对QT中信号与槽的详细使用方法做出介绍。

一、什么是信号与槽?

  1. 信号:(Signal)由操作系统产生的消息。指对象发生了某种事件,如点击按钮、文本框内容改变等。Qt中的控件和对象都定义了与之对应的信号。

    :(slot) 程序中的消息处理函数。槽函数可以对信号事件做出响应,如更新界面、修改对象的属性等。

    连接:(connect) 将系统消息绑定到消息处理函数,以使信号事件的发生可以触发槽函数的执行。
    在这里插入图片描述

信号 到 槽 的连接必须发生在两个 QT 类对象之间。

2.QT 中的关键字:

SIGNAL : 用于 指定 消息名。
SLOT : 用于 指定 消息处理函数
Q_OBJECT : 所有 自定义的槽类 必须在类声明的开始处加上 Q_OBJECT
slots : 用于在类中 声明消息处理函数。


二、QObject::connect 函数

在 Qt 中,我们通常使用 connect( ) 函数来建立信号与槽之间的连接.

sender 的 信号 发生时, signal 就会映射到 receivermethod成员函数上。

bool QObject::connect ( const QObject * sender, 
						const char * signal, 
						const QObject * receiver, 
						const char * method,
						 Qt::ConnectionType type = Qt::AutoConnection );
  • sender : 指定了信号的发送者
  • signal : 信号函数的指针, 消息名
  • receiver : 信号的接收者
  • method : 接收者的槽函数指针,接收对象的成员函数

ps :
在 QT 中,消息用字符串 进行描述。
connect 函数在消息名和处理函数之间 建立 映射。

示例代码:

class Widget : public QWidget
{
   Q_OBJECT  //声明(由于自定义槽函数)
private:
    QPushButton FontDialogBtn;
    
private slots:
    void FontDialogBtn_click();  // 消息处理函数
    
public:
    Widget(QWidget *parent = 0);
    ~Widget();
};

连接函数:

connect(&FontDialogBtn, SIGNAL(clicked()),this, SLOT(FontDialogBtn_click()));  

三、QT 中的字符串类 QString

在 Qt 中,QString 是 Qt 提供的一个字符串处理类,它的成员函数覆盖了许多方面的字符串处理,包括文本处理、查找、替换、分割和格式化等。

在这里插入图片描述

1. 创建和初始化字符串:

/* 创建了两个具有相同值的QString变量。 */
QString str1 = "Hello World";  // 常量字符串

QString str2("Hello World");   // 构造函数

2. 字符串的拼接和添加

在Qt中,我们可以使用以下方法将两个字符串连接在一起:

QString str1 = "Hello";
QString str2 = "World";
QString result = str1 + " " + str2;

在上面的例子中,我们使用了+运算符以将两个字符串连接在一起,并将结果存储在新的QString中。

除此之外,我们还可以在字符串的末尾添加新的字符或子串。为此,QString提供了append( ) 、operator+=( ) 和 push_back( ) 成员函数。

3. 字符串的查找和替换

在Qt中,我们可以使用以下函数查找和替换字符串:

QString str = "This is a test string";
int index = str.indexOf("test");  // 查找test在字符串中第一次出现的位置
int lastIndex = str.lastIndexOf("test");  // 查找test在字符串中最后一次出现的位置

QString newStr = str.replace("test", "example"); // 将test替换为example

在上面的例子中,我们定义了一个字符串,然后使用indexOf()和lastIndexOf()函数查找test在字符串中第一次和最后一次出现的位置。最后,我们使用replace()函数将test替换为example

4. 字符串的分割和处理

在Qt中,我们可以使用以下函数对字符串进行分割和处理:

QString str = "Name: John\nAge: 30";
QStringList list = str.split("\n");  // 按行分割,返回QStringList类型

QString name = list[0].split(": ")[1];  // 获取姓名
int age = list[1].split(": ")[1].toInt();  // 获取年龄并转换为int类型

在上面的例子中,我们使用了split()函数来将字符串按行分割,并返回QStringList类型。然后我们使用split()函数返回的结果就是一个QStringList类型的列表,我们可以通过索引将列表中的元素获取出来。接下来,我们可以使用split()函数进一步将每行按":"进行分割,并获取每个字段的值。

还可以使用其他的QString函数进行一些其他的字符串操作,如 trimmed( ) 函数可以去除字符串首尾的空格toUpper()函数可以将字符串转为大写字母等。


总结

在本文中,我们简要介绍了Qt中信号与槽机制的基础知识及用法。

通过信号与槽机制的使用,我们可以使得代码变得更加清晰、易于维护,并且能够轻松地处理对象与对象之间的通信。

在使用过程中一定要注意对象的生命周期和连接关系,否则有可能会引起内存泄漏和程序崩溃等问题。

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

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

相关文章

Project1:Boolean Logic

目录 Part1:Lecture && bookunit 1.1 Boolean Logicunit 1.2 boolean function synthesisunit 1.3 logic gatesunit 1.4 Hardware Description languageunit 1.5 Hardware simulationunit 1.6 Multi-bit Buses part2:Project Part1:Lecture && book unit 1.1 …

Invalid bound statement (not found):报错解决方法

报错信息: Invalid bound statement (not found): com.atguigu.auth.mapper.SysMenuMapper.findMenuListByUserId 因为:maven加载机制 maven默认情况下,只会加载编译ser-main-java目录里面java类型文件,其他类型文件不会进行加…

如何利用在线帮助中心解决客户问题?

随着互联网的不断发展,越来越多的企业意识到客户服务的重要性。然而,如何提供高效、可靠、贴心的客户服务一直是企业面临的难题。在这个背景下,在线帮助中心应运而生。本文将介绍如何利用在线帮助中心解决客户问题,让企业更好地提…

中交二公局的数字化转型之路:微信扫一扫即可轻松巡检

中交二公局主要从事路桥施工等业务,具有公路工程施工总承包特级资质,是一家集铁路、隧道、机场、水工、市政、工程施工设计、咨询、监理等为一体的大型国有施工企业。 自成立以来,中交二公局在工程施工领域积累了丰富的经验,业务…

【java】maven引用外部 jar 包,以RXTXcomm.jar为例

目录 1.作为资源文件夹内的资源引用2.将jar包手动安装到maven仓库 工具:IntelliJ IDEA 2020.2.3 x64 1.作为资源文件夹内的资源引用 1.在项目根路径新建文件夹lib, 将资源文件复制到该文件夹。 2.将文件夹设置为资源文件夹:选中文件夹lib右键 -> Mak…

vscode + python + jupyter notebook环境配置

参考网络上的大神文章,在公司PC上搭建Pythonvscode环境,做一下记录。 安装环境参考如下文章: https://blog.csdn.net/qq_52271115/article/details/126773282 安装完毕Python后,我公司的电脑需要额外将下面两个环境变量添加到 …

出苗率相关论文

文章目录 2021A UAV Open Dataset of Rice Paddies for Deep Learning PracticeAutomatic UAV-based counting of seedlings in sugar-beet field and extension to maize and strawberry(Computers and Electronics in Agriculture) 2022Detection and Counting of Maize Leav…

6D目标检测简述

6D目标检测简述 文章目录 6D目标检测简述介绍基于模版匹配的算法基于点的算法基于描述子的算法基于特征的算法 基于深度学习的6D姿态估计基于RGB图像的深度学习方法**SSD-6D****Deep-IM****PV-Net****HybridPose****Self6D****DSC-PoseNet****GDR-Net****SO-Pose****KDF-Net** …

一文搞定接口幂等性架构设计方案

幂等性介绍 现如今很多系统都会基于分布式或微服务思想完成对系统的架构设计。那么在这一个系统中,就会存在若干个微服务,而且服务间也会产生相互通信调用。那么既然产生了服务调用,就必然会存在服务调用延迟或失败的问题。当出现这种问题&am…

VIP + Nginx + Keepalived

VIP(Virtual IP Address),虚拟IP地址,主要是用来进行不同主机之间的切换,主要用在服务器的主从切换技术。主从服务器都配置同一个VIP地址,保障系统不间断切换。 Keepalived是高可用解决方案,借助…

Zookeeper源码分析——ZK服务端加载数据源码解析

ZK服务端加载数据源码解析 (1)zk 中的数据模型,是一棵树,DataTree,每个节点,叫做DataNode (2)zk 集群中的DataTree 时刻保持状态同步 (3)Zookeeper 集群中每个…

现代化生态灌区智慧灌溉管理系统-中小灌区节水改造

系统概述 现代化生态灌区智慧灌溉管理系统主要对对灌区的水情、雨情、土壤墒情、气象等信息进行监测,对重点区域进行视频监控,同时对泵站、闸门进行远程控制,实现了信息的测量、统计、分析、控制、调度等功能。为灌区管理部门科学决策提供了依…

SpringCloud断路器——Hystrix

Hystrix 本专栏学习内容来自尚硅谷周阳老师的视频 有兴趣的小伙伴可以点击视频地址观看 简介 Hystrix是一个用于处理分布式系统的延迟和容错的一个开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等,Hystrix…

React context 用法

Context 提供了一个无需为每层组件手动添加 props,就能在组件树间进行数据传递的方法。 1. 用法 React.createContext const MyContext React.createContext(defaultValue);创建一个 Context 对象。当 React 渲染一个订阅了这个 Context 对象的组件,…

服务(第六篇)LNMP

第一步、安装nginx: 前期准备: 安装依赖环境: 创建nginx用户和解压: 编译安装nginx: 优化: 进入/usr/local/systemd/system创建nginx.service(开启nginx服务) 结果: 第…

Vector - CAPL - Panel面板_03

CheckBox 功能:复选框可以用作控制和显示元素,使用它可以启动、显示、使能等选项。 适用场景: 1、特定场景触发某些使能信号,例如转速达到5000r/mi后使能Checkbox,触发错误场景等 2、亦或者将信号设置为特定的值。 3、…

树莓派计算机视觉编程:1~5

原文:Raspberry Pi Computer Vision Programming 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 计算机视觉 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 当别人说你没有底线的时候&#xff…

资讯分享 | 华为云携手图扑软件共话行业新发展

华为云携手制造行业同路人共话行业新发展 当前,国家高度重视制造业的“智改数转”,然而面向工业数字化转型的复杂场景,涉及的工业软件和信息软件星罗棋布、不胜枚举。 因此,企业在数字化转型落地过程中会产生语言无法对齐、应用…

(数字图像处理MATLAB+Python)第五章图像增强-第四、五节:基于模糊技术和基于伪彩色处理的图像增强

文章目录 一:基于模糊技术的图像增强(1)图像的模糊特征平面(2)算法步骤(3)程序 二:基于伪彩色处理的图像增强(1)真彩色、假彩色和伪彩色(2&#x…

《扬帆优配》TMT板块或成跨年主线 大消费行业复苏“虽迟但到”

4月14日,第61届我国资本商场高档研讨会暨上证春季所长论坛的圆桌二环节题为“新气象新特征 如何掌握2023年出资主线”,由浙商证券研究所联席所长邱世梁主持。 我国经济延续复苏态势,结构上正在推进以高端制作、安全自主、数字经济为导向的工业…