线性容器(QByteArray、QString、QList模板类)、堆栈窗体

QT 线性容器

点击查看:字符和字节的区别,ASCII、Unicode 和 UTF-8 编码的区别。(👈 安全链接,放心跳转)
在这里插入图片描述

QByteArray

思考:char buf[6] = “hello”;
如果 C 语言中要利用 buf 内容重新生成 “hello world” 字符串,该怎样做?

char dest[16] = {0};// 方法一
strcat(dest, buf);
strcat(dest, " world");// 方法二
sprintf(dest, "%s world", buf);

Qt 通过 QByteArray 为我们提供了一个可变长的字节数组容器。主要用来存储原始的字节流
QByteArray 仍可以表示字符串,类似于 unsigned char buf[],但是 Qt 中多用 QString 来表示字符串。
QByteArray 一般结合其它类使用,比如 QIODevice 类的 QByteArray QIODevice::readAll()。

QByteArray(const char *data, int size = -1);  		// 构造函数
char	at(int i) const; 							// 返回第i个元素
void	clear();  									// 清空
bool	contains(const char * str) const;  			// 是否包含字符串  <==> strstr
bool	contains(char ch) const; 					// 是否包含字符
char 	*data();  									// 从 QByteArray 类型转化为 char *int	indexOf(const char *str, int from = 0);		// 查找 从 from 开始第一次匹配 str 的位置
QByteArray & append(char ch);  					// 尾部增加
QByteArray & prepend(char ch); 					// 头部增加
int	length() const;  							// 返回长度
QByteArray &remove(int pos, int len);  			// 删除

💡

QByteArray 定义一个字符串 “my”,使用 qDebug 输出每个字符。
在其前增加 "Welcome to ",其后增加 " world. ",验证新字符串中是否包含 “we” 字符串。
删除从 “world” 字符串后的所有字符。

// main.cpp#include "widget.h"
#include <QApplication>int main(int argc, char *argv[])
{QByteArray arr("my");arr.prepend("Welcome to ");arr.append(" world. ");qDebug() << arr;for (int i = 0; i < arr.length() / 5; i++)		// 字符太多,显示前几个qDebug("0x%x", arr.at(i));qDebug() << arr.contains("we");qDebug() << arr.contains("We");					// 大小写敏感arr.remove(arr.indexOf("world")+5, arr.length());// 若要删除 含 "world" 在内的、其后所有字符,去掉 +5// 第二个参数写长些,可以多于字符串中剩余字符的个数,不会报错qDebug() << arr;return 0;
}

在这里插入图片描述

QString

QString 类提供了一个 Unicode 文本和经典的 C语言 以 ‘\0’ 结尾的字符数组的抽象。

数字转字符串

QString	number(long n, int base = 10) [static];
QString	number(double n, char format = 'g', int precision = 6) [static];

e.g.
long a = 63;
QString s = QString::number(a, 10); // s == “63”
QString t = QString::number(a, 16).toUpper(); // t == “3F”
QByteArray 同理。

字符串转数字

short	 toShort(bool * ok = 0, int base = 10) const;
float	 toFloat(bool * ok = 0) const;
long	 toLong(bool * ok = 0, int base = 10) const;
// 也可以 toInt

e.g.
QString str1 = “1234.56”;
float a = str1.toFloat(); // a == 1234.56
QByteArray 同理。

QString 转 QByteArray

QByteArray toLocal8Bit() const;
QByteArray toUtf8() const;

QByteArray 转 char *

char 	*data();

QString 通过 QByteArray 间接转 char *

QString 没有直接转换为 char * 的方法,需要中间经过一层 QByteArray 的过渡。

char 	*dest = src.toLocal8Bit().data();
char    *dest = src.toUtf8().data();

QList 模板类

QList(const QList<T> & other);
QList<T> &	operator<<(const QList<T> & other);

💡

定义一个 int 类型的 QList,初始化为1、2、3,再增加 4。
定义一个 QString 类型的 QList,只需要把 改为 ,再初始化。

#include "widget.h"
#include <QApplication>int main(int argc, char *argv[])
{QList<int> list;				// 不能在这里初始化list << 1 << 2 << 3;list.append(4);qDebug() << list;            // 不能这样写:qDebug(list);QList<QString> strlist;  	// 不能在这里初始化strlist << "b" << "c" << "d";strlist.prepend("a");for (int i = 0; i < strlist.length(); i++)qDebug() << strlist.at(i);       	// 不能格式化输出 %cQList<QByteArray> qblist;	// 不能在这里初始化qblist << "x" << "y";qblist.append("z");for (int i = 0; i < qblist.length(); i++)qDebug() << qblist.at(i);            // 不能格式化输出 %creturn 0;
}

在这里插入图片描述

堆栈窗体

QStackedWidget

Public Functions:QStackedWidget(QWidget * parent = 0);如果单纯指定父窗口,但是没有指定大小,那么是不显示的int	addWidget(QWidget * widget);增加窗体,增加完后默认会分配一个 index值,从 0 开始int	currentIndex() const;获取当前显示窗体的 index值Public Slots:void	setCurrentIndex(int index);设置 第index 个页面为栈顶(显示页面) 			// 一般用这个void	setCurrentWidget(QWidget *widget); Signals:void currentChanged(int index);窗体发生变化后,发出信号,index 代表更换后窗体 index 值

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

widget.cpp

#include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent)
{// 初始化三个窗体QWidget *firstPageWidget = new QWidget;QWidget *secondPageWidget = new QWidget;QWidget *thirdPageWidget = new QWidget;// 在三个窗体分别设置三个按钮QPushButton *btn1 = new QPushButton("Page 1", firstPageWidget);QPushButton *btn2 = new QPushButton("Page 2", secondPageWidget);QPushButton *btn3 = new QPushButton("Page 3", thirdPageWidget);// 实例化堆栈窗体对象,把窗体添加到堆栈窗体QStackedWidget *stackedWidget = new QStackedWidget;stackedWidget->addWidget(firstPageWidget);stackedWidget->addWidget(secondPageWidget);stackedWidget->addWidget(thirdPageWidget);//    QListWidget *listWidget = new QListWidget;
//    QListWidgetItem *firstItem = new QListWidgetItem(tr("First"), listWidget);
//    QListWidgetItem *secondItem = new QListWidgetItem(tr("Sencond"), listWidget);
//    QListWidgetItem *thirdItem = new QListWidgetItem(tr("Third"), listWidget);//    listWidget->insertItem(0, firstItem);
//    listWidget->insertItem(1, secondItem);
//    listWidget->insertItem(2, thirdItem);					// 两种方法都可以,方法一QListWidget *listWidget = new QListWidget;				// 方法二listWidget->addItem(tr("First"));listWidget->addItem(tr("Sencond"));						// 多打了个 n,请忽略listWidget->addItem(tr("Third"));QHBoxLayout *layout = new QHBoxLayout;layout->addWidget(listWidget, 1);layout->addWidget(stackedWidget, 3);this->setLayout(layout);connect(listWidget, SIGNAL(currentRowChanged(int)), stackedWidget, SLOT(setCurrentIndex(int)));// 堆栈窗体的槽是确定的 —— setCurrentIndex(int),也就意味着对应信号的参数也必须和槽匹配this->resize(960, 600);}Widget::~Widget()
{
}

在这里插入图片描述

UI 实现堆栈窗体

在这里插入图片描述

布局部分

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

信号与槽

该部分可用代码实现,也可用 UI 实现。

UI 实现

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码实现(widget.cpp)
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);QObject::connect(ui->listWidget, SIGNAL(currentRowChanged(int)), \ui->stackedWidget, SLOT(setCurrentIndex(int)));
}Widget::~Widget()
{delete ui;
}

效果展示
在这里插入图片描述

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

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

相关文章

学生备考使用台灯到底好不好?公认好用的护眼台灯推荐

在现代生活中&#xff0c;许多学生的学习压力越来越大&#xff0c;面临的近视几率也越来越大&#xff0c;特别是初中生&#xff0c;眼睛发育还未完全&#xff0c;使用不恰当的灯光也会对眼睛造成损害&#xff0c;特别是护眼台灯。虽然护眼台灯在功能上能够提供充足、柔和的光线…

《文存阅刊》期刊发表简介

《文存阅刊》以“深研文化创新&#xff0c;崇尚科学真理&#xff0c;坚持双百方针&#xff0c;打造学术精品”为办刊宗旨&#xff0c;涵盖艺术、文学、社科等多项内容&#xff0c;适应了文化市场需求&#xff0c;很好的回应了广大文化理论工作者的关切&#xff0c;为下一步打造…

ChatGPT新媒体运营神器:轻松驾驭内容创作与传播

文章目录 1. 内容创作2. 社交媒体管理3. 用户互动与客户服务 《巧用ChatGPT轻松玩转新媒体运营》内容简介作者简介目录前言/序言本书内容本书特色本书读者对象获取方式 随着互联网的高速发展&#xff0c;新媒体已经成为了人们获取信息、交流思想的重要渠道。在这个信息爆炸的时…

【SpringCache】快速入门 通俗易懂

1. 介绍 Spring Cache 是一个框架&#xff0c;实现了基于注解的缓存功能&#xff0c;只需要简单地加一个注解&#xff0c;就能实现缓存功能。 Spring Cache 提供了一层抽象&#xff0c;底层可以切换不同的缓存实现&#xff0c;例如&#xff1a; EHCache Caffeine Redis(常用…

Centos7、Mysql8.0 load_file函数返回为空的终极解决方法--暨selinux的深入理解

零、问题背景 最近想换房&#xff0c;为了方便自己对比感兴趣的房子&#xff0c;因此决定将目标房源的基本信息放在表里&#xff0c;特别是要一目了然的看到众多房子的各种图纸和照片&#xff0c;因此决定要在Mysql8.0.34数据库中以二进制形式保存图片&#xff08;抛开合理性和…

Vue 2.0源码分析-update

Vue 的 _update 是实例的一个私有方法&#xff0c;它被调用的时机有 2 个&#xff0c;一个是首次渲染&#xff0c;一个是数据更新的时候&#xff1b;由于我们这一章节只分析首次渲染部分&#xff0c;数据更新部分会在之后分析响应式原理的时候涉及。_update 方法的作用是把 VNo…

思维链(CoT)提出者 Jason Wei:关于大语言模型的六个直觉

文章目录 一、前言二、主要内容三、总结 &#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、前言 Jason Wei 的主页&#xff1a;https://www.jasonwei.net/ Jason Wei&#xff0c;一位于 2020 年从达特茅斯学院毕业的杰出青年&#xff0c;随后加盟了…

大数据安全保障的四种关键技术

随着大数据时代的到来&#xff0c;数据安全保障的重要性日益凸显。大数据安全保障涉及多种关键技术&#xff0c;以下是四种关键技术的详细介绍。 数据加密技术 数据加密技术是大数据安全保障的核心技术之一。它通过将明文数据转化为密文数据&#xff0c;以保护数据的机密性和完…

CSS中 设置文字下划线 的几种方法

在网页设计和开发中&#xff0c;我们经常需要对文字进行样式设置&#xff0c;包括字体,颜色&#xff0c;大小等&#xff0c;其中&#xff0c;设置文字下划线是一种常见需求 一 、CSS种使用 text-decoration 属性来设置文字的装饰效果&#xff0c;包括下划线。 常用的取值&…

炫酷不止一面:探索JavaScript动画的奇妙世界(下)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

proftpd安全加固:限制用户FTP登录

其实无所谓安全加固&#xff0c;因为proftp默认就是限制用户FTP登录的&#xff0c;这里有点凌乱得研究和实验了proftpd如何进行限制的&#xff0c;以及可能的放开限制。懂了这些才能更好的进行防护配置。 RootLogin指令其实主要作用就是启用ROOT访问。通常&#xff0c;proftpd在…

【Fastadmin】一个完整的轮播图功能示例

目录 1.效果展示&#xff1a; 列表 添加及编辑页面同 2.建表&#xff1a; 3.使用crud一键生成并创建控制器 4.html页面 add.html edit.html index.php 5.js页面 6.小知识点 1.效果展示&#xff1a; 列表 添加及编辑页面同 2.建表&#xff1a; 表名&#xff1a;fa_x…

【LabVIEW学习】5.数据通信之TCP协议,控制电脑的一种方式

一。tcp连接以及写数据&#xff08;登录&#xff09; 数据通信--》协议--》TCP 1.tcp连接 创建while循环&#xff0c;中间加入事件结构&#xff0c;创建tcp连接&#xff0c;写入IP地址与端口号 2.写入tcp数据 登录服务器除了要知道IP地址以及端口以外&#xff0c;需要用户名与密…

中通单号查询,中通快递物流查,备注需要的单号记录

批量查询中通快递单号的物流信息&#xff0c;并对需要的单号记录进行备注。 所需工具&#xff1a; 一个【快递批量查询高手】软件 中通快递单号若干 操作步骤&#xff1a; 步骤1&#xff1a;运行【快递批量查询高手】软件&#xff0c;第一次使用的朋友记得先注册&#xff0c…

快速幂(C语言)

前言 快速幂算法一般用于高次幂取模的题目中&#xff0c;比如求3的10000次方对7取模。这时候有些同学会说&#xff1a;这还不简单&#xff1f;我直接调用pow函数然后对结果%7不得了么&#xff1f;可是3的10000次方这么庞大的数字&#xff0c;真的能储存在计算机里么&#xff1f…

c#学习相关系列之as和is的相关用法

一、子类和父类的关系 public class Program{static void Main(string[] args){Animal animal new Dog();// Dog dog (Dog)new Animal(); 编译成功&#xff0c;运行报错Dog dog (Dog)animal;Dog dog new Dog();Animal animal dog; //等价于Animal animal new Dog();}}pub…

企业计算机服务器中了eking勒索病毒怎么办,eking勒索病毒解密数据恢复

随着计算机网络技术的不断发展与应用&#xff0c;企业的生产运营效率得到了极大提升&#xff0c;但网络安全威胁一直存在&#xff0c;网络威胁的技术也在不断更新&#xff0c;给企业的数据安全带来了严重威胁。在本月&#xff0c;云天数据恢复中心陆续接到很多企业的求助&#…

C++ Qt开发:Qt的安装与配置

Qt是一种C编程框架&#xff0c;用于构建图形用户界面&#xff08;GUI&#xff09;应用程序和嵌入式系统。Qt由Qt公司&#xff08;前身为Nokia&#xff09;开发&#xff0c;提供了一套跨平台的工具和类库&#xff0c;使开发者能够轻松地创建高效、美观、可扩展的应用程序。其被广…

Python---random库

目录 基本随机数函数(): rand.seed() random() 扩展随机数函数(): random库包含两类函数&#xff1a;基本随机数函数&#xff0c;扩展随机数函数 基本随机数函数:seed(),random() 扩展随机数函数&#xff1a;randint,getrandbits(),uniform(),randrange(),choice(),shuff…

ECS云主机容量大于2TB,初始化Linux数据盘(parted)

本文为您介绍当容量大于2TB时&#xff0c;如何在Linux环境下适用parted分区工具初始化数据盘。 操作场景 本文以“CentOS 7.6 64位”操作系统为例&#xff0c;介绍当磁盘容量大于2TB时&#xff0c;如何使用parted分区工具在Linux操作系统中为数据盘设置分区&#xff0c;操作回…