【Qt】数据类型和有用的数据操作类_qset初始化-程序员宅基地

技术标签: Qt  数据类  《嵌入式》Qt5开发笔记  字符串类  基本数据类型  容器类  

除了C++提供的基本数据类型之外,Qt还提供了了对开发者而言非常有用的多种数据类型。Qt提供的数据类型分为基本数据类型和类形态的数据类型。

 

基本数据类型

Qt支持多个平台,创建的应用程序需要在多种平台上都具有相同大小的数据类型。为了能精确指定数据类型的大小,Qt提供了一下的基本数据类型:

Qt基本数据类型
类型 大小 说明
bool 8位 true/false
qint8 8位 signed char
qint16 16位 signed short
qint32 32位 signed int
qint64 64位 long long int
quint8 8位 unsigned char
quint16 16位 unsigned short
quint32 32位 unsigned int
qunit64 64位 unsigned long long int
float 32位 浮点数
double 64位 浮点数
const char* 32位 指向字符串常量的指针

比较和判断变量的函数

Qt提供了可以比较/判断数据类型值的一般函数和模板函数。下面对这些函数进行简单的介绍:

Qt比较和判断变量的函数
函数 说明
T qAbs(const T &value) 返回绝对值
const T& qBound(const T& min,const T& value, const T& max) 返回最大值和最小值之间值
void qCritical(const Char* msg) 处理Critical消息的函数
void qDebug(const Char* msg) 输出调试信息的函数
void qFatal(const Char* msg) 处理错误信息的函数
bool qFuzzyCompare(double p1,double p2)[static] 比较浮点值的函数
bool qFuzzyCompare(float p1,float p2)[static] 比较浮点值的函数
QtMsgHandler qInstallMsgHandler(QtMsgHandler handler) 用户自定义函数,输出Qt定义的调试、预警、严重等消息
const T& qMax(const T& value1,const T& value2) 返回两个值中的最大值
const T& qMin(const T& value1,const T& value2) 返回两个值中的最小值
qint64 qRound64(qreal value) 64位整型四舍五入函数
int qRound(qreal value) 整型四舍五入函数

 

数据类

 

Qt提供基本数据类型的同时,为了在开发应用程序时能顺利操作数据,还提供了各种类。

QBitArray

QBitArray类提供了位数组,通过AND、OR、XOR、NOT执行为操作,从而减少不必要的位数据复制造成的内存浪费。

QBitArray类的初始化方法为:

QBitArray ba(200);

QBitArray可以重新调整数组大小。

QBitArray ba;
ba.resize(3);
ba[0] = true;

同样,QBitArray支持&(AND)、|(OR)、^(XOR)、~(NOT)运算。

提供的成员函数可通过false、true操作所有声明为QBitArray类的数组:

QBitArray ba(200);
ba.fill(true);

QBrush

QBrush类用于定义QPainter图形填充模式。一个笔刷(Brush)可以表现风格、颜色、斜度和质地。比如:

QPainter painter(this);
painter.setBrush(Qt::cyan);
painter.setPen(Qt::darkCyan);
painter.drawRect(0,0,100,100);

QByteArray

QByteArray类用于将字符串数据保存到字节数组,可以保存Raw数据和字符串(String)型(包括最后的'\0')的字节。与const char等字符常量想比,更简单易用。QByteArray在复制同一内存区域的字符串期间,会访问其它处理器,减少内存占用,从而高效使用内存。

因此,在嵌入式Linux平台使用QByteArray时,可提高内存的使用效率。

QByteArray类可将字符串保存到构造函数:

QByteArray ba("Hello");

除了使用构造函数存储字符串的方法外,还可以使用函数resize()动态分配大小:

QByteArray ba;
ba.resize(5);
ba[0] = 0x3c;
ba[1] = 0xb8;
ba[2] = 0x64;
ba[3] = 0x18;
ba[4] = 0xca;

可以使用at()函数读取数组中特定位置的数据:

for(int i=0;i<ba.size();i++){
        if(ba.at(i)>='a'&&ba.at(i)<='f')
                cout<<"Found in range [a-f]"<<endl;
}

QByteArray可以使字节数组包含字符串结束符'\0'。此时,如果利用函数size()返回数组字符串的整体大小,则其内不包含'\0'。

QByteArray ba1("ca\0r\0t");
qDebug()<<ba1.size();                        //返回2
qDebug()<<ba1.constData();

QByteArray ba2("ca\0r\0t",3);
qDebug()<<ba2.size();                        //返回3
qDebug()<<ba2.constData();

QByteArray ba3("ca\0r\0t",4);
qDebug()<<ba3.size();                        //返回4
qDebug()<<ba3.constData();

const char cart[]={'c','a','\0','r','\0','t'};
QByteArray ba4(QByteArray::fromRawData(cart,6));
qDebug()<<ba4.size();                        //返回6
qDebug()<<ba4.constData();

QByteArray提供的成员函数可以在字符串的前半部分或后半部分添加字符和字符串,并可更换特定位置的数据。

QByteArray x("and");
qDebug()<<x.prepend("rock ");                    //返回“rock and”
qDebug()<<x.append(" roll");                      //返回"rock and roll"  
qDebug()<<x.replace(5,3,"&");                        //返回“rock & roll”

QByteArray可以解码(Decode)Base 64格式的数据,使用成员函数FromBase64()即可。

QByteArray text=QByteArray::fromBase64("UXQgaXMgZ3JlYXQh");
qDebug()<<text.data();                    //返回Qt is great!

使用基于Base64编码(encode)的数据的算法使用的是RFC2045。此外,还可以改变保存为十六进制的数据,以及URL/URI格式输入的编码数据。

QByteArray text=QByteArray::fromHex("517420697320677265617421");
qDebug()<<text.data();

QByteArray text1=QByteArray::fromPercentEncoding("Qt%20is%20great%33");
qDebug()<<text1.data();

可以返回从字符串数组左边开始指定位置的数据。函数left()将指定的大小转换为参数:

QByteArray x("Pineapple");
QByteArray y=x.left(4);
qDebug()<<y;                            //返回“Pine”

此外,如果使用函数leftJustfied(),则可以使用从特定位置字符串之后开始指定的字符:

QByteArray x("apple");
QByteArray y=x.leftJustified(8,'.');
qDebug()<<y;                            //返回“apple...”

QByteArray还可以将储存的字符串数据变为int、float、long等类型的数据并保存。

QByteArray str("FF");
bool ok;
int hex=str.toInt(&ok,16);
int dec=str.toInt(&ok,10);
qDebug()<<hex<<dec;

QColor

QColor类提供基于RGB、HSV、CMYK的色彩值。换言之,除了用RGB(红绿蓝)构成颜色外,也会将HSV(色调、饱和度、亮度)和CMYK用作构成要素。

QColor主要使用RGB值。为了使用HSV和CMYK,可以使用函数toHsv()和toCmyk()进行转换。

QCursor

QCursor类可以将鼠标光标指定为任意形状。此类主要用于在特定控件上创建鼠标光标并设置位置。除标准鼠标光标形状外,还可以使用QBitmap、Mask、Hospot创建用户自定义的光标形状。

QDate

QDate类提供有关日期的功能。使用系统时钟(Clock)读取当前日期的年、月、日;QDate利用函数currentDate()读取当前时间,利用函数fromString()在字符中说明日期。

QDate类通过year()、mouth()和day()函数读取年、月、日,而且可以读取罗马字母格式的日期简称和全程。像给int型增加数字一样,利用函数addYears()、addMouths()和addDays()给当前日期的年、月、日增加参数值。

QDate类提供比较日期的功能:

QDate d1(1999,1,1);
QDate d2(2000,3,2);
qDebug()<<d1.daysTo(d2);                    //返回426

QDate类通过文本格式显示所有输入的字符,因此,显示日期的模式字符必须放在引号内输入:

QDate d1=QDate::fromString("02.25","MM.dd");
QString str=d1.toString("yyyy.MM.dd");
qDebug()<<str;

QFont

QFont类指定字体的属性,可以使用文字的字号、颜色、加粗、下划线、倾斜等属性。

QFont font("Times", 10, QFont::Bold);

QImage

QImage类可以访问图像等像素数据,提供与硬件无关的图像显示功能。Qt还提供了与QImage类功能类似的QPixmap、QBitmap、QPicture。

在这四个类中,QPixmap类在操作和显示图像方面功能最佳,而QImage类则在直接访问像素和连接并使用I/O方面表现不俗。

QKeySequence

QKeySequence类指定菜单快捷键,提供可快速执行菜单项目的用户界面。通过最常用的Ctrl键和字母的组合方式指定快捷键。

QKeySequence(tr("ctrl+P"));
QKeySequence(Qt::CTRL+Qt::Key_P);

QMargins

QMargins类指定举行4个区域的边距值,即左、上、下、右这4个区域。

利用函数setLeft()、setRight()、setTop()和setBottom()可以分别设置相应的边距值。

QUrl

QUrl类在使用URL的界面中很好用,它提供了多种功能以操作编码或未编码的URL。

QUrl url("www.lvchademiao.com/list of time");
qDebug()<<url.toEncoded();
qDebug()<<QUrl::fromEncoded("www.lvchademiao.com/list%20of%20time");

 

容器类

与STL相比,Qt提供的容器类使用起来更安全、更简单,而且都是轻量化的。因此Qt提供的容器类可以代替STL提供的容器类。

QHash<Key,T>

QHash类提供了基于散列表的字典。存储方式时键(Key)、值(Value)成对存储。通过键可以检索到要查的数据。QHash的功能虽然与QMap的功能非常类似,但其内部运算比QMap要更快。

为了通过键值使用QString且存储int,可进行如下声明:

QHash<QString,int> hash;
    
hash["one"]=1;                        //存值
hash.insert("seven",7);                //存值
    
int num1=hash["one"];                    //取值
int num2=hash.value("seven");            //取值
qDebug()<<num1<<num2;

QMultiHash<Key,T>

QMultiHash是继承自QHash的类,比QHash更适合存储多种散列值。虽然QHash不允许一键多值,但是QMultiHash却允许。因此QMultiHash提供了QHash扩大形态的类功能。

QMultiHash可以将存储为多值的项转换为QList的项:

QList<int> list=hash.values("number");
for(int i=0;i<list.size();i++){
        qDebug()<<list.at(i);
}

QList<T>

QList<T>以列表形态存储并管理值,并能进行基于快速索引的访问,还可以快速删除数据。QList类的使用方法与QLinkedList、QVector类的使用方法类似。

QList是基于索引的类,比QLinkedList的迭代器使用起来更方便,存储数据时分配内存的速度比QVector快。

比较不一样的是QList使用运算符将内容添加到列表。

QList<QString> list;
list<<"one"<<"two"<<"three";                //向列表添加值
for(int i=0;i<list.size();i++){
        if(list.at(i)=="two")
                qDebug()<<list.at(i);                    //从列表取值
}

QLinkedList<T>

QLinkedList<T>类基于迭代器,可以插入和删除列表的项目。

QLinkedList<QString> list;
list<<"one";
list<<"two";

QVector<T>

QVector<T>作为容器类之一,可以快速存储相关项目到存储器的位置,并提供基于索引的快速访问。

QVector将项目存储到向量,一般在声明的同时分配向量大小:

QVector<QString> vector(20);
vector<<"one";
vector.append("two");
qDebug()<<vector.at(0);
vector[0]="three";
qDebug()<<vector.at(0);

当使用“<<”或者append()函数时,是在整个向量的末尾添加项目。

QStack<T>

QStack<T>是提供栈算法的类,其结构是后进先出(LIFO)。

QStack<int> stack;
stack.push(1);                    //入栈
stack.push(2);
while(!stack.isEmpty()){
        qDebug()<<stack.pop();            //出栈
}

QQueue<T>

QQueue<T>类提供了队列算法的类,是先进先出的结构,与栈相反。

QQueue<int> queue;
queue.enqueue(1);                //入队列
queue.enqueue(2);
while(!queue.isEmpty()){
        qDebug()<<queue.dequeue();            //出队列
}

QSet<T>

QSet<T>是Qt容器类之一,保存结构没有指定顺序,故可以快速查找。QSet的内部结构由QHash实现。通过存储QString的方法可以实现初始化。

QSet<QString> set;
set.insert("one");
set<<"two";

 

字符串类

QByteArray

QByteArray类提供字节(8位)单位的数组,如下所示将字符数组存储到QByteArray中:

QByteArray ba("Qt");
qDebug()<<ba.size();            //返回2

利用成员函数size()获得字符数组的长度,尽管其中包含了字符串结束标志'\0',但是size()结果中并不显示出来。

为了添加和编辑QByteArray存储的字符数组,Qt提供了成员函数append()、prepend()、insert()、replace()、remove()等等函数。

QByteArrayMatcher

QByteArrayMatcher类在字节数组中查找匹配的字节数组模式。

QByteArray x("hello qt byebye");                    //整体字符串
QByteArray y("qt");                                //要寻找的字符串

QByteArrayMatcher matcher(y);                //寻找器
qDebug()<<matcher.indexIn(x,0);                //寻找匹配

QChar

用于支持16位Unicode字符的类。

QString str1="Hello Qt",str2;
QChar* data=str1.data();
while(!data->isNull()){
        str2.append(data->unicode());
        data++;
}
qDebug()<<str2;                    //输出“Hello Qt”

QString

QString类支持Unicode字符的字符串,可以存储16位QChar。

QString类可以使用%1、%2~%99的参数范围显示或存储字符串:

QString str=QString("Hello %1 , Byebye %2").arg("Qt").arg("WinForm");
qDebug()<<str;

QStringList

QStringList类继承自QList<QString>,可进行“<<”运算和大量的成员函数。

QStringMatcher

QStringMatcher类比较QString字符串,以查找对应的字符。

 

最终总结起来的部分,可以参考链接: QT数据类型和有用的数据操作类总结

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_38410730/article/details/80762778

智能推荐

leetcode 172. 阶乘后的零-程序员宅基地

文章浏览阅读63次。题目给定一个整数 n,返回 n! 结果尾数中零的数量。解题思路每个0都是由2 * 5得来的,相当于要求n!分解成质因子后2 * 5的数目,由于n中2的数目肯定是要大于5的数目,所以我们只需要求出n!中5的数目。C++代码class Solution {public: int trailingZeroes(int n) { ...

Day15-【Java SE进阶】IO流(一):File、IO流概述、File文件对象的创建、字节输入输出流FileInputStream FileoutputStream、释放资源。_outputstream释放-程序员宅基地

文章浏览阅读992次,点赞27次,收藏15次。UTF-8是Unicode字符集的一种编码方案,采取可变长编码方案,共分四个长度区:1个字节,2个字节,3个字节,4个字节。文件字节输入流:每次读取多个字节到字节数组中去,返回读取的字节数量,读取完毕会返回-1。注意1:字符编码时使用的字符集,和解码时使用的字符集必须一致,否则会出现乱码。定义一个与文件一样大的字节数组,一次性读取完文件的全部字节。UTF-8字符集:汉字占3个字节,英文、数字占1个字节。GBK字符集:汉字占2个字节,英文、数字占1个字节。GBK规定:汉字的第一个字节的第一位必须是1。_outputstream释放

jeecgboot重新登录_jeecg 登录自动退出-程序员宅基地

文章浏览阅读1.8k次,点赞3次,收藏3次。解决jeecgboot每次登录进去都会弹出请重新登录问题,在utils文件下找到request.js文件注释这段代码即可_jeecg 登录自动退出

数据中心供配电系统负荷计算实例分析-程序员宅基地

文章浏览阅读3.4k次。我国目前普遍采用需要系数法和二项式系数法确定用电设备的负荷,其中需要系数法是国际上普遍采用的确定计算负荷的方法,最为简便;而二项式系数法在确定设备台数较少且各台设备容量差..._数据中心用电负荷统计变压器

HTML5期末大作业:网页制作代码 网站设计——人电影网站(5页) HTML+CSS+JavaScript 学生DW网页设计作业成品 dreamweaver作业静态HTML网页设计模板_网页设计成品百度网盘-程序员宅基地

文章浏览阅读7k次,点赞4次,收藏46次。HTML5期末大作业:网页制作代码 网站设计——人电影网站(5页) HTML+CSS+JavaScript 学生DW网页设计作业成品 dreamweaver作业静态HTML网页设计模板常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 明星、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 军事、 游戏、 节日、 戒烟、 电影、 摄影、 文化、 家乡、 鲜花、 礼品、 汽车、 其他 等网页设计题目, A+水平作业_网页设计成品百度网盘

【Jailhouse 文章】Look Mum, no VM Exits_jailhouse sr-iov-程序员宅基地

文章浏览阅读392次。jailhouse 文章翻译,Look Mum, no VM Exits!_jailhouse sr-iov

随便推点

chatgpt赋能python:Python怎么删除文件中的某一行_python 删除文件特定几行-程序员宅基地

文章浏览阅读751次。本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。AI职场汇报智能办公文案写作效率提升教程 专注于AI+职场+办公方向。下图是课程的整体大纲下图是AI职场汇报智能办公文案写作效率提升教程中用到的ai工具。_python 删除文件特定几行

Java过滤特殊字符的正则表达式_java正则表达式过滤特殊字符-程序员宅基地

文章浏览阅读2.1k次。【代码】Java过滤特殊字符的正则表达式。_java正则表达式过滤特殊字符

CSS中设置背景的7个属性及简写background注意点_background设置背景图片-程序员宅基地

文章浏览阅读5.7k次,点赞4次,收藏17次。css中背景的设置至关重要,也是一个难点,因为属性众多,对应的属性值也比较多,这里详细的列举了背景相关的7个属性及对应的属性值,并附上演示代码,后期要用的话,可以随时查看,那我们坐稳开车了······1: background-color 设置背景颜色2:background-image来设置背景图片- 语法:background-image:url(相对路径);-可以同时为一个元素指定背景颜色和背景图片,这样背景颜色将会作为背景图片的底色,一般情况下设置背景..._background设置背景图片

Win10 安装系统跳过创建用户,直接启用 Administrator_windows10msoobe进程-程序员宅基地

文章浏览阅读2.6k次,点赞2次,收藏8次。Win10 安装系统跳过创建用户,直接启用 Administrator_windows10msoobe进程

PyCharm2021安装教程-程序员宅基地

文章浏览阅读10w+次,点赞653次,收藏3k次。Windows安装pycharm教程新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入下载安装PyCharm1、进入官网PyCharm的下载地址:http://www.jetbrains.com/pycharm/downl_pycharm2021

《跨境电商——速卖通搜索排名规则解析与SEO技术》一一1.1 初识速卖通的搜索引擎...-程序员宅基地

文章浏览阅读835次。本节书摘来自异步社区出版社《跨境电商——速卖通搜索排名规则解析与SEO技术》一书中的第1章,第1.1节,作者: 冯晓宁,更多章节内容可以访问云栖社区“异步社区”公众号查看。1.1 初识速卖通的搜索引擎1.1.1 初识速卖通搜索作为速卖通卖家都应该知道,速卖通经常被视为“国际版的淘宝”。那么请想一下,普通消费者在淘宝网上购买商品的时候,他的行为应该..._跨境电商 速卖通搜索排名规则解析与seo技术 pdf

推荐文章

热门文章

相关标签