当前位置:首页 > 芯闻号 > 充电吧
[导读]QString 类是 Qt 中用于表示字符串的类,实现在 QtCore 共享库中。QString 类在实现上有以下特征。1)字符串采用 Unicode 内部编码,可以表示世界上大多数语言的文字。2)字

QString 类是 Qt 中用于表示字符串的类,实现在 QtCore 共享库中。QString 类在实现上有以下特征。

1)字符串采用 Unicode 内部编码,可以表示世界上大多数语言的文字。

2)字符串的存储有引用计数,当一个 QString 对象被复制为另一个 QString 对象时,它们实际上指向相同的存储空间,仅仅是增加一个引用计数。

 3)采用 “按需复制” 的技术,当指向相同存储空间的多个 QString 对象中的一个要被修改时,将真正复制一个新的字符串并进行修改。


构造

QString 类提供了很多不同原型的构造函数以方便使用。如:



Qstring();                                        // 构造空字符串
QString(QChar ch);                           // 由 QChar 对象 ch构造
QString(const QChar *pch, int size);    // 由 QChar 数组pch构造,size 是数组大小
QString(const QString &obj);              // 拷贝构造函数
QString(const char *str);                  //  由字符串 str 构造,str是一个普通字符串



由于存在这些构造函数,凡是可以用 QString 类作为参数的地方,都可以安全地使用 QChar 对象或普通的字符串。



判断 

可以用下面的成员函数判断 QString 对象是否为空字符串:



bool isEmpty() const;    // 判断是否为空字符串



转换

QString 类提供了很多函数用于将字符串转换为数值,如:



double toDouble(bool *ok = 0) const;                                     // 转换为高精度浮点数
float toFloat(bool *ok = 0) cosnt;                                          // 转换为浮点数
int toInt(bool *ok, int base = 10) const;                                 // 转换为整型数
long toLong(bool *ok, int base = 10) cosnt;                            // 转换为长整型
short toShort(bool *ok, int base = 10) const;                          // 转换为短整型
uint toUInt(bool *ok = 0; int base = 10) const                         // 转换为无符号整型数
ulong toLong(bool *ok = 0, int base = 10) const;                     // 转换为无符号长整型数 
ushort toUShort(bool *ok = 0, int base = 10) const;                 // 转换为无符号短整型数



这些函数能够解析 QString 对象的内容,将其转换为相应的数值。其中 ok 参数指向一个 bool 型变量, 这个参数用于输出转换是否成功的信息。base参数则是转换为整数类型时的基。这些函数都不会改变 QString 对象自身。 



注意: 当字符串以 0x开头时,转换的基自动转换为16, 当字符串以0开头时,转换的基自动为8。


下面这些成员函数可以将一个数值转换为字符串并设为 QString 对象的值:



QString &setNum(int n, int base = 10);                                           // 整型数
QString &setNum(uint n, int base = 10);                                         // 无符号整型数
QString &setNum(long n, int base = 10);                                        // 长整型
QString &setNum(ulong n, int base = 10);                                       // 无符号长整型数
QString &setNum(short n, int base = 10);                                       // 短整型数
QString &setNum(ushort n, int base = 10);                                      // 无符号短整型数
QString &setNum(double n, char format = 'g', int precision = 6);          // 高精度浮点数
QString &setNum(float n, char format = 'g', int precision = 6);            // 浮点数


       将浮点数转换为字符串时,format 参数指定转化格式,precision 参数指定转换结果的精度,既有效数组的个数。注意这些函数会改变 QString 对象本身的值,而以下的函数则采用了不同的做法,它们返回一个新的临时对象以供使用:




QString number(int n, int base = 10);
QString number(uint n, int base = 10);
QString number(long n, int base = 10);
QString number(ulong n ,int base = 10);
QString number(double n, char format = 'q', int precision = 6);



这些函数都是静态成员函数,因而与某个具体的对象无关,可以直接通过类名调用。



QString 类也提供了大小写转换的函数,如:



QString toLower() const;    // 转换为小写
QString toUpper() const;    // 转换为大写



这些函数都不会改变 QString 对象本身,而是将转换后的结果作为返回值。



比较

QString 类提供了一个函数用于两个 QString 对象的比较:



int compare(const QString &s1, const QString &s2, Qt::CaseSensitivity cs = Qt::CaseSensitive);


这是一个静态成员函数,它可以比较 s1 和 s2 的大小,参数 cs 有以下两个取值。




Qt::CaseInsensitive: 表示对大小写不敏感
Qt::Casesensitive :    表示对大小写敏感



返回值的含义如下:大于 0 表示 s1 大于 s2,等于 0 表示 s1 等于 s2, 小于 0 表示 s1 小于 s2。


为了方便使用,QString 类还提供了以下重载函数用于比较:



int compare(const QString &other, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;



这个函数用于比较 QString 对象自身和 QString 对象 other。


实际上更为直观的是使用 QString 类的比较操作符,如



bool operator < (StringType other) const;        // 比较是否小于 other人
bool operator  (StringType other) constt;       // 比较是否大于 other
bool operator >= (StringType other) const;      // 比较是否大于等于 other
bool operator != (StringType other) const;       // 比较是否不等于 other


      这里的 StringType 指的是 (const QString &)或 (const char *),哥也就是说,这些操作副既可以与 QString 对象比较,也可以与普通的字符串比较。它们的局限性是第一个操作数必须是 QString 对象,因此,Qt 中又定义了以下操作符:




bool operator < (const char *s1, const QString &s2);                 // 比较 s1 是否小于 s2
bool operator  (const char *s1, const QString &s2);                 // 比较 s1 是否大于 s2
bool operator >= (const char *s1, const QString &s2);               // 比较 s1 是否大于等于 s2
bool operator != (const char *s1, const QString &s2);                // 比较 s1 是否不等于 s2



这些操作符不是 QString 类的成员,它们的第一个参数是普通字符串。


        

 查找
 用以下的成员函数可以判断 QString 对象是否包含指定的字符串或字符:



bool contains(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;      
bool contains(cosnt ch, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;


用以下的成员函数可以得到 QString 对象包含某个特定字符串或字符的个数:




int count(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
int count(QChar ch, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;



 用以下的成员函数可以得到 QString 对象中某个特定字符串或字符出现的位置:



int indexOf(const QString &str, int from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
int indexOf(QChar ch, int from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;


        这里参数 from 是查找的起点,它可以为负数,-i 表示倒数第i个字符。查找的方向是从前往后。返回值是查找到的字符串或字符的位置,如果没有找到则返回 -1。



        QString 类中还有与此功能相似的函数用于从后往前查找字符串或字符:


int lastIndexOf(const QString &str, int from = -1, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
int lastIndexOf(QChar ch, int from = -1, Qt::CaseSensitivity cs = Qt::CaseSensitive) const


     字符串处理

        QString  类支持用赋值操作符进行对象的复制,其赋值操作符的声明如下:


QString &operator = (const QString &other);        // 复制另外一个 QString 对象
QString &operator = (const char *str);               // 复制普通字符串
QString &operator = (char ch);                         // 复制字符
QString &operator = (QChar ch);                       // 复制 QChar 类对象


以下的成员函数可以将另一个字符串或字符接在 QString 对象后面,形成一个整体的字符串:



QString &append(const QString &str);                // 接续 QString 对象
QString &append(const char *str);                    // 接续普通字符串
QString &append(QChar ch);                            // 接续 QChar 对象



它们的返回值是 QString 对象自己的引用,也就是说,可以用在这个返回值再次调用成员函数,形成连续的字符串接续操作。

 为了让代码更直观, QString 类中还定义了一个操作符用于字符串的接续



QString &operator += (const QString &other);     // 续接 QString 对象
QString &operator += (const char *str);    // 续接普通字符串
QString &operator += (char ch);    // 接续字符型数据
QString &operator += (QChar ch);   // 接续 QChar 对象


 它们的功能与 append 相同。由于 C++ 语言允许赋值操作符和复合赋值操作符的返回值作为左值使用,因此它们的返回值也被设计为 QString 对象自己的引用,故也可以连续操作。但由于复合赋值操作符的结合顺序是从右往左,要想先计算左边的操作数需要加括号。
        



       与 append 函数功能类似,以下的成员函数也能够将另一个字符串或字符与 QString 对象连接起来,但是接在原字符串的前面:



QString &prepend(const QString &str);          // 在前面接续 QString 对象
QString &prepend(const char *str);              // 在前面接续普通字符串
QString &prepend(QChar ch);                      // 在前面接续 QChar 对象


功能更一般化的是在 QString 对象的任意位置插入另一个字符串或字符,如:




QString &insert(int position, const QString &str);                   // 插入字符串
QString &insert(int position, const QChar *pch, int size);         // 插入 QChar 数组
QString &insert(int position, QChar ch);                               // 插入 QChar 对象


 这里 position 参数是要插入的位置,返回值也是对 QString 对象自己的引用。 



       与插入相反的操作是移除 QString 对象中的一部分,如:



QString &remove(int position, int n);


这个函数可以移除 QString 对象中从位置 position 开始的 n 个字符,


下面两个成员函数则可以从 QString 对象中移除指定的字符串或字符:



QString &remove(QChar ch, Qt::CaseSensitivity cs = Qt::CaseSensitive);
QString &remove(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive);


 以下是 QString 对象的替换操作:




QString &replace(int position, int n, const QString &after);                    // QString 对象
QString &replace(int position, int n, const QChar *pch, int size);            // QChar 数组
QString &replace(int opsition, int n, QChar after);                                // QChar 对象



这三个函数的功能是将 QString 对象从 position 开始的 n 个字符替换为新内容,新内容分别由 QString 对象、QChar 数组 和 QChar 对象表示。

 以下成员函数则可以搜索指定的字符串或字符并开始替换:



QString &replace(const QString &before, const QString &after, Qt::CaseSensitivity cs = Qt::CaseSensitive);      // QString 替换为 QString
QString &replace(QChar ch, cosnt QString &after, Qt::CaseSensitivity cs = Qt::CaseSensitive);                       // QChar 替换为 QString
QString &replace(QChar before, QChar after, Qt::CaseSensitivity cs = Qt::CaseSensitive);                              // Qchar 替换为 QChar


下面这个成员函数可以清空一个 QString 对象的内容,使之成为空字符串。



void clear();


 而下面这个成员函数可以截断 QStrring 对象,也就是去掉指定位置后的所有内容:



void truncate(int position);      // 从位置 position 截断,位置从0开始编号


下面这个成员函数可以截掉 QString 对象最后的若干个字符:



void chop(int n);     // 截掉最后的 n个字符


以下几个成员函数可以得到 QString 对象的子字符串:



QString left(int n) const;      // 得到左边 n 个字符构成的子字符串
QString right(int n) const;    // 得到右边 n 个字符构成的子字符串
QString mid(int position, int n = -1) const;  // 从中间得到子字符串


从中间得到子字符串时,参数 position 是子字符串的起始位置,参数 n 是字符串的个数,如果n 为 -1,则表示一直到原字符串的结尾。


注意上述三个函数并不修改 QString 对象自身,而是返回一个临时对象以供使用。

下面这个成员函数可以截去 QString 对象中头部和尾部的空白字符:



QString trimmed() const;


       空白字符包括空格、回车、换行、制表符等字符。下面这个成员函数不仅能去掉 QString 对象头尾的空白字符,还能将中间的连续多个空白字符全部替换成一个空格:



QString simlified() const;


加法操作符可以将两个字符串或字符连接起来并以 QString 临时对象的方式返回:



const QString operator+(const QString &s1, const QString &s2);       
const QString operator+(const QString &s1, const char *s2);
const QString operator+(const char s1, const QString &s2);
const QString operator+(const QString &s, char ch);


注意加法操作符的两个操作数中必须至少有一个是 QString 对象,否则无法重载操作符。显然,加法操作副都不是 QString 类的成员。     

        

 索引

QString 类也像普通的字符串一样可以根据下标得到某个位置上的字符:



const QChar at(int position) const;


这是一个成员函数,更直观的方法是用以下的操作符:



const QChar operator[] (int position) const;
const QChar operator[] (uint position) const;


         这样对 QString 对象的取字符操作就类似于对一个字符数组的操作。事实上,通过【】操作符得到的字符还可以被修改,要用到另外两个重载的【】操作符:



QCharRef operator[] (int position);
QCharRef operator[] (uint position);


返回的 QCharRef 类是一个辅助类,对它的修改将反映到原字符串中去。


统计

 以下两个成员函数都可以得到 QString 对象中字符的个数



int size() const;
int length() const;


注意字符的个数并不一定等于字节数。













本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

其实在 c++语言里面const修饰的才算是一个真正的常量,在 c 语言中 const 可以说是个“冒牌货”。为什么会这样?其实是 c++ 编译器对 const 进行了加强,当 c++ 编译器遇到常量声明时,不会像 c...

关键字: c++ C语言 const

返回函数的引用去初始化一个新的引用这个和前面一样,都是不会产生副本,但是现在是用返回值去初始化一个引用声明c,也就是说这时候变成了变量temp的别名,在c的生命周期内temp是一直有效的,这样做完全可以。

关键字: c++ 返回值 引用声明

C++是一种面向对象的高级程序设计语言,是C语言的超集。

关键字: c++ C语言

摘 要 :为解决制鞋行业中喷胶精度不高、灵活性差、生产效率低的问题,设计一种基于机器视觉的鞋模喷胶系统。该系统硬件由工业摄像头、工控机及路由器构成,软件则采用图像识别库 OpenCV 与图形界面应用程序开发框架 Qt 编...

关键字: 机器视觉 图像处理 鞋模 喷胶 OpenCV QT

嵌入式系统是指以应用为中心、以计算机技术为基础,软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。

关键字: QT 嵌入式 C++

摘 要:仓储作为物流与供应链的核心环节,对食品安全的控制起着至关重要的作用。温湿度是影响粮食仓储过程安全与品质的重要因素。文中使用无线传感网络进行数据采集,通过Qt平台设计软件系统,并借助数据库进行数据存储与分析处理,实...

关键字: 成品粮 仓储 温湿度监测 无线传感网络 QT

在此部件上绘制行号,并将其放置在CodeEditor的viewport()的左边距区域上,QWidget类也可以帮助我们对其内容进行滚动。

关键字: QT 代码编辑器

不管是Qt新手还是开发过qt的群体来说,对Qt Designer、Qt Quick Designer、Qt Creator这几个应用程序肯定是熟悉的。

关键字: QT IDE C

在当今社会,人们的生活水平普遍提高,工作强度越来越大,营养的过剩和运动量的减少,导致心脑血管疾病的发病率是越来越高。

关键字: Linux QT GPRS 远程集群式 心脏病人实时诊断系

qt值得学习吗? 嵌入式要学的东西真的很多,我们可能会说不写界面的话就不用学qt了?我不赞同。

关键字: 嵌入式 QT UI
关闭
关闭