QT常见数据类型和类的使用

QByteArray

QByteArray 是一个Qt框架中的类,它是一个可变长的字节数组,可以用于存储任意类型的数据,包括二进制数据和文本数据

// 创建数组
QByteArray byteArray; // 空的字节数组
QByteArray byteArray1("Hello world"); // 初始化为字符串
QByteArray byteArray2 = "Hello world"; // 等同于上面的初始化方式
QByteArray byteArray3(10, '\0'); // 创建一个长度为10的空字节数组

//访问 QByteArray 中的数据:
char *data = byteArray.data(); // 获取字节数组的指针
int size = byteArray.size(); // 获取字节数组的长度
char byte = byteArray.at(0); // 获取字节数组中指定位置的字节

//将 QByteArray 转换为 QString
QByteArray bytes("hello world");
// 方法1
QString str = QString::fromUtf8(byteArray); //将字节数组转换为UTF-8编码的字符串
// 方法2
QString string = bytes;
// 方法3
QString string;
string.prepend(bytes);

//将 QString 转换为 QByteArray
QString str("hello");  
// 方法1
QByteArray bytes = str.toUtf8(); // 将字符串转换为UTF-8编码的字节数组
//方法2
QByteArray bytes = str.toLatin1();

//1
QByteArray ba("Hello");//大小为 5 的字节数组
//2
QByteArray ba;
ba.resize(5);
ba[0] = 0x3c;
ba[1] = 0xb8;
ba[2] = 0x64;
ba[3] = 0x18;
ba[4] = 0xca;
//3,对于只读访问,另一种语法是使用 at()
for (int i = 0; i < ba.size(); ++i) {if (ba.at(i) >= 'a' && ba.at(i) <= 'f')cout << "Found character in range [a-f]" << endl;
}
//4,修改字节数据的基本函数:append()、prepend()、insert()、replace() 和 remove()
QByteArray x("and");
x.prepend("rock ");         // x == "rock and"
x.append(" roll");          // x == "rock and roll"
x.replace(5, 3, "&");       // x == "rock & roll"// 在QByteArray第0个字节后插入一个字符
byteArray.insert(1, 'B');
// 在QByteArray第1个字节后插入一个字符串
byteArray.insert(2, "123");
// 删除4~6字节
byteArray.remove(4, 3);
// 获取QByteArray的大小
int size = byteArray.size();
// 获取QByteArray的指针(只读)
const char* data = byteArray.constData();QByteArray byteArray("Hello World");
QString str = QString::fromUtf8(byteArray);
// 获取QByteArray的data
const char* data = byteArray.data();
// 将QString转换为C字符串
QString str = "Hello World";
const char* c_str = str.toUtf8().data();

QString

1、Qt中的字符串类

(1)、采用Unicode编码(支持中文等)

(2)、使用隐式共享技术(集合了深拷贝浅拷贝)来节省内存和不必要的拷贝

(3)、跨平台使用,不需要考虑字符串的平台兼顾

2、Qstring VS string

(1)、Qstring 直接支持字符串和数字的互相转换

(2)、Qstring 直接支持字符串的比较大小

(3)、Qstring 直接支持不同字符编码间的相互转换

(4)、Qstring 直接支持std::string和std::wstring(宽)的相互转换

(5)、Qstring直接支持正则表达式的应用

(6)、Qstring在Qt库中几乎无所不在的,所有的Qt图形用户组件都依赖于Qstring

 

#include <QApplication>
#include <QDebug>
#include <QString>void Sample_1()
{QString s = "add";s.append(" ");   //"add "s.append("Qt");  //"add Qt"s.prepend(" ");  //" add Qt"s.prepend("C++");//"C++ and Qt"qDebug() << s;s.replace("add", "&"); //"C++ & Qt"qDebug() << s;
}void Sample_2()
{QString s = "";int index = 0;s.sprintf("%d. I'm %s, thank you!", 1, "SantaClaus"); //"1. I'm SantaClaus, thank you!"qDebug() << s;index = s.indexOf(",");//从索引0到index之间的字符子串s = s.mid(0, index);  //"1. I'm SantaClaus"qDebug() << s;index = s.indexOf(".");s = s.mid(index + 1,s.length()); //" I'm SantaClaus";s = s.trimmed();                 //"I'm SantaClaus";qDebug() << s;index = s.indexOf(" ");s = s.mid(index + 1, s.length()); //"SantaClaus"qDebug() << s;
}void Sample_3(QString* a, int len)
{for(int i=0;i<len;i++){for(int j=i+1; j<len; j++){if( a[j] < a[i]){QString tmp = a[i];a[i] = a[j];a[j] = tmp;}}}
}int main(int,char**)
{qDebug() << "Sample_1:";   Sample_1();  qDebug() << endl;qDebug() << "Sample_2:";  Sample_2(); qDebug() << endl;qDebug() << "Sample_3:";  QString company[5] ={QString("Oracle"),QString("Borland"),QString("Microsoft"),QString("IBM"),QString("Horizon Studio")      };Sample_3(company, 5);for(int i=0; i<5; i++){qDebug() << company[i];}  return 0;
}

QVector

#include <QtCore/QCoreApplication>
#include <QVector>
#include <iostream>
using namespace std;int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QVector<int> vec;vec.push_back(9);vec.append(3);vec.push_back(7);vec.push_front(5);vec.push_front(2);vec.append(6);vec.insert(0, 11);vec.insert(0, 12);vec.insert(4, -1);//12 11 2 5 9 3 7 6for (int elem : vec){cout << elem << " , ";}cout << endl;//删除元素cout << "QVector删除数据操作" << endl;vec.pop_back();vec.pop_front();vec.remove(2, 1);  //删除当前vec的第2个数据for (int elem : vec){cout << elem << " , ";}cout << endl;//当前vec的元素:11 2 -1 9 3 7cout << "迭代器用法" << endl;//QVector<int>::iterator it;//for (it = vec.begin(); it != vec.end(); it++)for(auto it= vec.begin(); it != vec.end(); it++){if (*it == -1){vec.erase(it);  //删除掉-1}cout << *it << " ,";}cout << endl;vec.clear();cout << "清空后vec大小 = " << vec.size() << endl;return a.exec();
}
/*运行结果:12 , 11 , 2 , 5 , -1 , 9 , 3 , 7 , 6 ,QVector删除数据操作11 , 2 , -1 , 9 , 3 , 7 ,迭代器用法11 ,2 ,9 ,3 ,7 ,清空后vec大小 = 0*/

QHash

//1、创建;这里以键int,值QString示例
QHash<int,QString> qhash;
//2、插入//方式一qhash[1] = "1";qhash[2] = "2";qhash[3] = "3";//方式二qhash.insert(4, “4”);// qhash.insert(4,"10);先前的值将被删除 
//3、取值//方式一   QString str1=qhash.value(1);//str1="1";//方式二QString str2=qhash[2];//str1="2";//4、检索某个值是否在里面if(qhash.contains(9)){return false;}if(qhash.contains(1)){return true;}
//5、查找某个字并获取QString str;if(qhash.contains(1)){str=qhash.value(1);      }else{str=qhash.value(1,"wert");//如果哈希表中不存在指定键的元素,该函数使用第2个参数作为默认值}//6、遍历 QHash 中存储的所有键值对
QHash<int,QString>::const_iterator it = qhash.constBegin();
while (it != qhash.constEnd()) {cout << it.key() << ": " << it.value() << Qt::endl;++it;
}//7、删除,下面两种都可以qhash.erase(it);//这里的it是迭代器哦qhash.remove(key);

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

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

相关文章

电脑如何录视频?进阶教程来了!

随着科技的飞速发展&#xff0c;视频录制已成为我们日常生活和工作中不可或缺的一部分。无论是进行在线教育、制作教学视频&#xff0c;还是记录游戏过程、直播分享&#xff0c;录屏都扮演着至关重要的角色。可是您知道电脑如何录视频吗&#xff1f;本文将介绍两种电脑录视频的…

php做桌面应用,具体有哪些,但是集成图形库gui就差了点。主流的gui框架有哪些,php作为服务器端语言,处理网页没有问题

php做桌面应用&#xff0c;具体有哪些&#xff0c;但是集成图形库gui&#xff0c;比起python就差了点。主流的gui框架有哪些&#xff0c; 导读&#xff1a;现在流行全栈开发&#xff0c;一种语言满足web应用&#xff0c;桌面应用&#xff0c;手机应用&#xff0c;但是Php桌面应…

java 判断一个整数是否是回文数

java 判断一个整数是否是回文数 要判断一个整数是否是回文数&#xff0c;可以将其转换为字符串&#xff0c;然后比较字符串的正序和倒序是否相同。以下是用 Java 编写的判断回文数的函数&#xff1a; public class Palindrome {public static boolean isPalindrome(int x) {//…

稀碎从零算法笔记Day23-LeetCode:二叉树的最大深度

题型&#xff1a;链表、二叉树的遍历 链接&#xff1a;104. 二叉树的最大深度 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上…

vue2从基础到高级学习笔记

在实际的工作中,我常使用vue的用法去实现效果,但是你要是问我为什么这样写,它的原理是啥就答不上来了。对vue的认知一直停留在表面,写这篇文章主要是为了理清并弄透彻vue的原理。 学习目标 1 学会一些基本用法的原理 2 弄懂vue核心设计原理 3 掌握vue高级api的用法 一 vue…

sonarqube使用指北(一)- 基于docker的安装部署

一、前言 最近出于SDL的安全需求,打算部署一个静态代码扫描工具,出于通用性和可靠性的考虑,选择sonarqube来执行静态代码扫描。 SonarQube 是一个用于进行代码质量管理的开源平台,它提供了代码静态分析、代码检查、代码覆盖率等功能。下面是 SonarQube 的一些优缺点: 优点…

环境安装篇 之 安装kubevela

云原生学习路线导航页&#xff08;持续更新中&#xff09; 本文是 环境安装 系列文章&#xff0c;介绍 oam规范标准实施项目 kubevela 的安装详细步骤kubevela 官方安装文档&#xff1a;https://kubevela.io/zh/docs/installation/kubernetes/ 1.CentOS 安装kubevela 1.1.前提…

电脑数据安全新篇章:备份文件,守护您的珍贵数据

备份文件&#xff0c;无疑是电脑使用中不可或缺的重要一环。在数字化时代&#xff0c;我们的工作、学习和生活都离不开电脑&#xff0c;而电脑中的数据更是我们宝贵的财富。一旦数据丢失或损坏&#xff0c;可能会带来无法估量的损失。因此&#xff0c;备份文件的重要性不言而喻…

Vue.js+SpringBoot开发高校宿舍调配管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能需求2.1 学生端2.2 宿管2.3 老师端 三、系统展示四、核心代码4.1 查询单条个人习惯4.2 查询我的室友4.3 查询宿舍4.4 查询指定性别全部宿舍4.5 初次分配宿舍 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的…

力扣hot100:4. 寻找两个正序数组的中位数(归并排序/二分/双指针)

目录 一、暴力排序 二、归并排序 三、双指针 四、二分查找 如果本题不说明时间复杂度应该为O(log(mn)&#xff0c;那么本题应该是一个简单题&#xff0c;解决的方法有很多。这里先列举出普通方法&#xff0c;再来讨论二分。 一、暴力排序 不管啦&#xff0c;直接纯暴力&…

2024蓝桥杯每日一题(BFS)

备战2024年蓝桥杯 -- 每日一题 Python大学A组 试题一&#xff1a;母亲的奶牛 试题二&#xff1a;走迷宫 试题三&#xff1a;八数码1 试题四&#xff1a;全球变暖 试题五&#xff1a;八数码2 试题一&#xff1a;母亲的奶牛 【题目描述】 农夫约…

黑白照片怎么变彩色?3个实用上色方法分享

黑白照片怎么变彩色&#xff1f;这是一个让许多人感到好奇和期待的问题。随着科技的发展&#xff0c;现在已经有多种软件可以将黑白照片转变为彩色&#xff0c;让历史的回忆重新焕发出生机。这些软件利用先进的算法和图像处理技术&#xff0c;能够精准地还原出照片中的色彩&…

Android学习进阶

UI组件进阶 使用RecyclerView和Adapter显示列表数据 RecyclerView是Android开发中用于显示列表数据的一个灵活且高效的组件。与其前身ListView相比&#xff0c;RecyclerView引入了更加复杂的布局排列和动画支持&#xff0c;使得创建高度定制化的列表和网格布局变得更加简单。…

【前端】卡片渐变色阴影效果 旋转动画

【前端】卡片渐变色阴影效果 旋转动画 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>Breathing…

【G3D笔记】AI生成式3D算法相关环境安装爬坑笔记

【G3D笔记】AI生成式3D算法相关环境安装爬坑笔记) 1、 RayMarching1.1 error C1189: #error: You need C++17 to compile PyTorch1.2 raymarching安装环境版本测试1.3 host_config.h(231): fatal error C1083: 无法打开包括文件: “crtdefs.h”2、Tiny-Cuda-nn2.1 HTTP/2 stre…

mysql体系结构及主要文件

目录 1.mysql体系结构 2.数据库与数据库实例 3.物理存储结构​编辑 4.mysql主要文件 4.1数据库配置文件 4.2错误日志 4.3表结构定义文件 4.4慢查询日志 4.4.1慢查询相关参数 4.4.2慢查询参数默认值 4.4.3my.cnf中设置慢查询参数 4.4.4slow_query_log参数 4.4.…

Hbase java客户端调优——Connections

1、介绍&#xff1a; 大约一年前&#xff0c;有人要求我为一个时间序列产品调优 HBase 的读写性能。该产品在 AWS i2.4XL 中使用 10 个数据节点&#xff0c;并有 15 个计算节点&#xff0c;其中 10 个用于连续写入&#xff0c;5 个用于读取并运行来自这些数据节点的批处理作业…

面试十 简单工厂、工厂方法、抽象工厂

/*简单工厂 Simple Factory&#xff1a;优点&#xff1a;把对象的创建封装在一个接口函数里面&#xff0c;通过传入不同的标识&#xff0c;返回创建的对象&#xff0c;客户不用自己负责new对象缺点 &#xff1a;提供创建对象实例的接口函数不闭合&#xff0c;不能对修改关闭&am…

Git一点通

1.Git的优势 Git是一个伟大的版本管理工具&#xff0c;比之svn&#xff0c;具有以下优势&#xff1a; 分布式版本控制&#xff1a;Git是一种分布式版本控制系统&#xff0c;每个开发者都拥有自己的完整代码库&#xff0c;不需要依赖网络连接就可以进行版本控制、合并和提交操作…

了解测试用例与测试场景

测试用例和测试场景是综合测试中最常见的两种测试工件。正确获得这两个可交付成果对于产品成功至关重要&#xff0c;因为它可以让软件开发团队和测试人员更高效地工作。然而&#xff0c;在 QA 测试中&#xff0c;测试场景和测试用例之间的差异可能会在转换过程中丢失。 测试用例…