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

2023-11-16


前言

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中信号与槽机制的基础知识及用法。

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 是否可以在 Qt Creator 中将 Qt 样式表与升级的小部件一起使用?

    我正在尝试使用 Qt 样式表对标准小部件进行一些重大的重新设计 因此 在为不同的小部件手动完成大部分工作之后 objectName选择器 我决定以某种方式对类似的小部件进行分组 例如我有多个QFrames其作用类似于内部表单中的标题 我希望
  • Qt中正确的线程方式

    我的图像加载非常耗时 图像很大 并且在加载时也完成了一些操作 我不想阻止应用程序 GUI 我的想法是在另一个线程中加载图像 发出图像已加载的信号 然后用该图像重绘视图 我的做法 void Window loadImage ImageLoad
  • 将 UTC 格式的 QDateTime 转换为本地系统时间

    我从这样的字符串构造 QDateTime QDateTime date QDateTime fromString 2010 10 25T10 28 58 570Z yyyy MM ddTHH mm ss zzzZ 我知道date是 UTC
  • Qt:删除富文本

    对于明文有QFontMetrics elideText https doc qt io qt 5 qfontmetrics html elidedText https doc qt io qt 5 qfontmetrics html eli
  • 当从 html 文件读取 Unicode 内容时,为什么 Unicode 字体在 QTextBrowser 中无法正确显示?

    我正在读一本html文件 该文件基本上包含Unicode案文如下 b akko sati kru akkh ti khy abbahati b h b But the QText浏览器不解释Unicode字体 所以QText浏览器显示如下
  • 扩展 TabViewStyle styleData

    我目前正在尝试找到一种更好的方法来执行此操作 将图标添加到选项卡 现在 我正在放弃 styleData title 以包含图标源 但如果能够扩展 styleData 就更好了 这样我就可以包含其他自定义属性 这是我当前的黑客 Tab tit
  • 面向 Delphi 开发人员的 Qt

    有人知道为 Delphi C Builder VCL 开发人员解释 Qt 的书籍或教程吗 对于具有该背景的开发人员来说 学习 Qt 的最佳方法是什么 我对如何使用 Qt 完成我知道如何在 Delphi 中完成的事情特别感兴趣 例如 Qt 相
  • 如何将枚举类传递给 QML?

    我正在学习QML with Qt并在通过时遇到一些麻烦enum class to qml 当我使用信号时int参数 一切正常 代码运行完美 But 麻烦就在这里 如果我使用信号与一些enum class我有参数undefinedqml 信号
  • 选择合适的IDE

    您会推荐使用以下哪种 IDE 语言来在 Windows 下开发涉及识别手势并与操作系统交互的项目 我将使用 OpenCV 库来执行图像处理任务 之后 我将使用 win32 API 或 NET 框架与操作系统交互 具体取决于您建议的工具 性能
  • 包含 Qt 标头的正确方法是什么?

    到目前为止我知道几种方法 includeQt 类 include
  • QML改变图像颜色

    我搜索了如何对图像进行着色 格式为 svg 或 png 我尝试用一 个填充图像的矩形覆盖我的图像 但由于我的图像不是矩形 它会给整个矩形着色 而不仅仅是图像 可以用qml改变图像颜色吗 或者 是否可以使用 QPixmap 更改 qt 使用
  • QObject多重继承

    我正在尝试在 C Qt 类中使用 mix 来提供一大堆具有通用接口的小部件 该接口是以这样的方式定义的 如果它被定义为其他小部件类的基类 那么小部件本身将具有这些信号 class SignalInterface public QObject
  • Qt 创建者 4.8.4。 Windows 7 - 64 位安装

    我在 QT 方面遇到了一些困难 我需要在学校使用它来完成一些 GUI 应用程序 我最近完成了以下步骤 1 mingw get inst 20120426 exefrom 来源锻造 http sourceforge net projects
  • Android 版 Qt 和 BoringSSL

    我正在开发一个基于 Qt 的 Android 应用程序 它使用 QSslSocket 下载数据 由于 Android 从 OpenSSL 转向 BoringSSL 因为依赖 OpenSSL 库的 Marshmallow Qt 程序在 And
  • cmake 找不到 Qt4

    由于4 8 0已经发布 我重新安装了Qt 现在我也想使用cmake 为了使 cmake 工作 我记得必须添加 mingw bin 文件夹 QtSDK Desktop Qt 4 7 3 到Qt4 7 3中的PATH 所以我猜测在中会有一个类似
  • 在 Windows 上从源代码构建 PhantomJS-2

    我正在尝试基于这些在 Windows 8 1 x64 上从源代码构建 PhantomJS 2 的开发版本指示 https github com ariya phantomjs wiki PhantomJS 2 但是我收到以下错误 mingw
  • MapItemView 在 dataChanged 信号后不会更新

    我正在使用 QMLMapItemView使用 C 的组件QAbstractListModel基于模型 这MapItemView当模型重置时 或者每当添加新项目或删除现有项目时 工作正常 但是 那MapItemView不反映对已添加项目的更改
  • 当给定 100k 项时,QListView 需要很长时间才能更新

    我在读取文件时遇到问题 具体是我想制作一本小字典 在我需要阅读的文件中有这样的内容 a Ph P6 a snsr CA a b c fb Dj a b c book i BS A except B gate oOPa y a font kQ
  • Qt QML MenuItem iconSource不显示

    我有一个非常简单的设置只是为了说明问题 import QtQuick Controls 1 4 import QtQuick Window 2 2 ApplicationWindow visible true width 640 heigh
  • 使用 QPrinter 打印第 x 页(共 y 页)

    我使用 qt 从 html 代码生成 pdf 文件 QTextDocument document new QTextDocument document gt setHtml htmlContent QPrinter printer QPri

随机推荐

  • 计算机科学巨匠

    贝尔实验室联合多家准备开发Multics 系统 但是最后退出了 但是却培养了优秀的人才 如肯汤姆森 花了四周时间自己做了一个简化的系统 这就是Unix的雏形 因为简化所以同事称为unics 后来觉得用B语言编写性能差 与Ritchie 合作
  • u版YOLOv3的卷积权重分享

    网上有许多关于预训练权重的分享 但大部分都要收费 官网下载又太慢了 自己就破费一把 本着一人收费 大家共享的原则 将自己花钱下载的权重文件分享出来 yolov3 tiny conv 15 darknet53 conv 74 链接 https
  • 动态规划C语言初学

    动态规划问题解决的基本思想 1 根绝问题所求的那一项和变量的个数 确定是一维数组 二维数组或者多维数组 2 写出初始值 一般是某个变量为1或者0 的特殊情况时候的解 3 通过循环 一般是两个循环中间每一层循环表示一个变量的递增情况 4 在循
  • 查看服务器文件命令,服务器上查看文件命令

    服务器上查看文件命令 内容精选 换一换 您可以使用JDK自带的keytool工具自制客户端的密钥库文件 client p12 再使用第三方openssl工具将client p12转换为client pem 最后根据client pem文件得
  • python期货基本面分析_Python量化炒期货入门与实战技巧

    1 1 初识量化炒期货 2 1 1 1 什么是量化炒期货 2 1 1 2 为什么要学习量化炒期货 3 1 2 量化炒期货的特点 4 1 2 1 严格的纪律性 5 1 2 2 完备的系统性 5 1 2 3 妥善运用套利的思想 5 1 2 4
  • 消息摘要算法

    文章目录 概述 MD Message Digest SHA Secure Hash Algorithm MAC Message Authentication Code 其它 概述 看图 我们在下载commons codec时候会有这么一个页
  • 接口接收数据_基于原语的千兆以太网RGMII接口设计

    之前介绍MII接口时 有介绍过RGMII接口的由来 下面在贴一下 表8 7 MII接口介绍 简述 Pins 速率计算 MII 基本的100Mbps 10Mbps接口 RXD 3 0 TXD 3 0 TX ER TX EN RX ER RX
  • 字符串算法题

    1 替换空格 1 剑指offer 请实现一个函数 将一个字符串中的每个空格替换成 20 例如 当字符串为We Are Happy 则经过替换之后的字符串为We 20Are 20Happy 这里我提供了两种方法 常规方法 利用 API 解决
  • 一些可能常用的工具函数

    一些可能常用的工具函数 返回当前的微秒数 1s 1000ms 1ms 1000us 返回当前时间的微秒 long GetCurrentTime timeval tv gettimeofday tv nullptr return tv tv
  • Java8 Stream应用:Map合并、过滤、遍历、values int求和等

    1 Java多个Map合并 多个Map
  • Stream流和不可变集合

    一 不可变集合 什么是不可变集合 不可变集合 就是不可被修改的集合 集合的数据项在创建的时候提供 并且在整个生命周期中都不可改变 否则报错 为什么要创建不可变集合 如果某个数据不能被修改 把它防御性地拷贝到不可变集合中是个很好的实践 或者当
  • 基于Raft协议的两节点主备系统调度算法

    摘要 以城市轨道交通列车指挥调度系统为代表的工业系统受限于工程成本 在运营现场往往仅部署两个服务节点 指挥调度中心因故障离线后 若采用主流的分布式一致性协议保证运营现场节点间数据一致性 将因为降低了可用性而无法容忍节点发生故障 为解决此问题
  • 计算机网络笔记(二)

    计算机网络体系结构 OSI参考模型 数据封装 增加控制信息 构造协议数据单元 PDU 控制信息主要包括 地址 Address 标识发送端 接收端 差错检测编码 Error detecting code 用于差错检测或纠正 协议控制 Prot
  • jsp、servlet、javabean中如何分别设置session的过期时间

    session的概念与基本用法 概念 当用户与服务器连接时 服务器给每个用户一个session 并设定其中内容 这些session相互独立 服务器可以借此来辨别用户信息 进而提供个别服务 session有存在期限 类 javax servl
  • 前端新人进入公司工作流程 超详细!!! 不被当小白

    出来上班除了些人情世故 基本的工作流程还是需要了解的 会避免很多的小麻烦 也不会被别人说是小白 进入公司之后首先熟悉的就是位置 通常产品开发部标配都是组长 前端前辈 后端 测试 UI 产品经理 等其他人员 如果有前辈带你那会更好 很多任务前
  • JWT渗透与攻防(二)

    目录 前言 JWT漏洞演示之CTFhub 一 JWT漏洞演示之CTFhub 二 前言 我们在之前的文章中已经讲解过了JWT漏洞相关的原理和利用 今天我们就通过这篇文章再来了解一下JWT的漏洞 JWT漏洞演示之CTFhub 一 我们进入CTF
  • 用gitmoji在git commit message 添加有意思的表情

    文章目录 用gitmoji在git commit message 添加有意思的表情 用gitmoji在git commit message 添加有意思的表情 用gitmoji 在commit message 添加有意思的表情 让提交代码更有
  • l2tp软件_反向L2TP拨号,接入公司网络

    2019肺炎还没有结束 今天第一天远程复工 前几天介绍了一个全局连回公司网络的方案 但有人私信我 公司没有为了临时办公搭建VPN的准备 大多公司的临时解决方案是用TeamViewer类软件来实现远程连接方案 这类方案基本都不是直连状态 都是
  • RS485通信以及modbus通信协议

    硬件层 rs485解决的是数据传输的问题 如何将0 1 传输到另一端 主机或从机将TTL电平通过485芯片转换成差分信号 抗干扰能力强 传输距离远 485芯片中集成了发送器和接收器 连接单片机io引脚通过高低电平来决定是发送方 还是 接收方
  • “QT 快速上手指南“ 之 计算器(三)信号与槽,connect 函数,QString

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