QString & String

error: C2664: 无法将参数 1 从“const char [13]”转换为“QString 扩展趣谈 #include "widget.h" #include <QApplication> QString foo(); void bar( QString &s); int main(int argc, char *argv[]) { QApplication b(argc, argv); Widget w; w.show(); bar(foo... 阅读详情

今天要说的是QString。之所以把QString单独拿出来,是因为string是很常用的一个数据结构,甚至在很多语言中,比如JavaScript,都是把string作为一种同int等一样的基本数据结构来实现的。

每一个GUI程序都需要string,这些string可以用在界面上的提示语,也可以用作一般的数据结构。C++语言提供了两种字符串的实现:C风格的字符串,以'\0‘结尾;std::string,即标准模版库中的类。Qt则提供了自己的字符串实现:QString。QString以16位Uniode进行编码。我们平常用的ASCII等一些编码集都作为Unicode编码的子集提供。关于编码的问题,我们会到以后的时候再详细说明。

在使用QString的时候,我们不需要担心内存分配以及关于'\0'结尾的这些注意事项。QString会把这些问题解决。通常,你可以把QString看作是一个QChar的向量。另外,与C风格的字符串不同,QString中间是可以包含'\0'符号的,而length()函数则会返回整个字符串的长度,而不仅仅是从开始到'\0'的长度。

同Java的String类类似,QString也重载的+和+=运算符。这两个运算符可以把两个字符串连接到一起,正像Java里面的操作一样。QString可以自动的对占用内存空间进行扩充,这种连接操作是恨迅速的。下面是这两个操作符的使用:

 
  1. QString str = "User: ";  
  2. str += userName + "\n"; 

QString的append()函数则提供了类似的操作,例如:

 
  1. str = "User: ";  
  2. str.append(userName);  
  3. str.append("\n"); 

C语言中有printf()函数作为格式化输出,QString则提供了一个sprintf()函数实现了相同的功能:

 
  1. str.sprintf("%s %.1f%%", "perfect competition", 100.0); 

这句代码将输出:perfect competition 100.0%,同C语言的printf()一样。不过前面我们也见到了Qt提供的另一种格式化字符串输出的函数arg():

 
  1. str = QString("%1 %2 (%3s-%4s)")  
  2.       .arg("permissive").arg("society").arg(1950).arg(1970); 

这段代码中,%1, %2, %3, %4作为占位符,将被后面的arg()函数中的内容依次替换,比如%1将被替换成permissive,%2将被替换成society,%3将被替换成1950,%4将被替换曾1970,最后,这句代码输出为:permissive society (1950s-1970s). arg()函数比起sprintf()来是类型安全的,同时它也接受多种的数据类型作为参数,因此建议使用arg()函数而不是传统的sprintf()。

使用static的函数number()可以把数字转换成字符串。例如:

 
  1. QString str = QString::number(54.3); 

你也可以使用非static函数setNum()来实现相同的目的:

 
  1. QString str;  
  2. str.setNum(54.3); 

而一系列的to函数则可以将字符串转换成其他基本类型,例如toInt(), toDouble(), toLong()等。这些函数都接受一个bool指针作为参数,函数结束之后将根据是否转换成功设置为true或者false:

 
  1. bool ok;  
  2. double d = str.toDouble(&ok);  
  3. if(ok)  
  4. {  
  5.     // do something...  
  6. } else {  
  7.     // do something...  
  8. } 

对于QString,Qt提供了很多操作函数,例如,使用mid()函数截取子串:

 
  1. QString x = "Nine pineapples";  
  2. QString y = x.mid(5, 4);            // y == "pine"  
  3. QString z = x.mid(5);               // z == "pineapples" 

mid()函数接受两个参数,第一个是起始位置,第二个是取串的长度。如果省略第二个参数,则会从起始位置截取到末尾。正如上面的例子显示的那样。

函数left()和rigt()类似,都接受一个int类型的参数n,都是对字符串进行截取。不同之处在于,left()函数从左侧截取n个字符,而right()从右侧开始截取。下面是left()的例子:

 
  1. QString x = "Pineapple";  
  2. QString y = x.left(4);      // y == "Pine" 

函数indexOf()返回字符串的位置,如:

 
  1. QString x = "sticky question";  
  2. QString y = "sti";  
  3. x.indexOf(y);               // returns 0  
  4. x.indexOf(y, 1);            // returns 10  
  5. x.indexOf(y, 10);           // returns 10  
  6. x.indexOf(y, 11);           // returns -1 

函数startsWith()和endsWith()可以检测字符串是不是以某个特定的串开始或结尾,例如:

 
  1. if (url.startsWith("http:") && url.endsWith(".png"))  
  2. {  
  3. } 

这段代码等价于

 
  1. if (url.left(5) == "http:" && url.right(4) == ".png")  
  2. {  
  3. } 

不过,前者要比后者更加清楚简洁,并且性能也更快一些。

QString还提供了replace()函数供实现字符串的替换功能;trimmed()函数去除字符串两侧的空白字符(注意,空白字符包括空格、Tab以及换行符,而不仅仅是空格);toLower()和toUpper()函数会将字符串转换成小写大写字符串;remove()和insert()函数提供了删除和插入字符串的能力;simplified()函数可以将串中的所有连续的空白字符替换成一个,并且把两端的空白字符去除,例如"   \t   ”会返回一个空格" "。

将const char *类型的C风格字符串转换成QString也是很常见的需求,简单来说,QString的+=即可完成这个功能:

 
  1. str += " (1870)"; 

这里,我们将const char * 类型的字符串" (1870)"转换成为QString类型。如果需要显式的转换,可以使用QString的强制转换操作,或者是使用函数fromAscii()等。为了将QString类型转成const char *字符串,需要进行两步操作,一是使用toAscii()获得一个QByteArray类型对象,然后调用它的data()或者constData()函数,例如:

 
  1. printf("User: %s\n", str.toAscii().data()); 

为了方便使用,Qt提供了一个宏qPrintable(),这个宏等价于toAscii().constData(),例如:

 
  1. printf("User: %s\n", qPrintable(str)); 

我们调用QByteArray类上面的data()或者constData()函数,将获得QByteArray内部的一个const char*类型的字符串,因此,我们不需要担心内存泄漏等的问题,Qt会替我们管理好内存。不过这也暗示我们,注意不要使用这个指针太长时间,因为如果QByteArray被delete,那么这个指针也就成为野指针了。如果这个QByteArray对象没有被放在一个变量中,那么当语句结束后,QbyteArray对象就会被delete,这个指针也就被delete 了。

本文出自 “豆子空间” 博客,请务必保留此出处http://devbean.blog.51cto.com/448512/275360

QString类详解 文章目录一、简要介绍1.1 隐式共享二、常用方法2.1 常用构造函数2.2 字符串与数值之间的转换2.3 添加字符串2.4 大小写转换 一、简要介绍 在Qt中表示字符串的类是QString类,它存储字符串是采用的Unicode码,编码方式是使用UTF-16来进行编码的,也就是一个字符(两个字节),一个中文汉字一般情况下是两个字节。 1.1 隐式共享 QString类采用了隐式共享的机制,那什么是隐式共享呢? 隐式共享:就是最大化资源的有效利用和最小化复制克隆操作。它是一种对象的管理方法(由隐式共享类所创建的 阅读详情

相关推荐

QString详解

QString是Qt编程中常用的类,除了用作数字量的输入输出之外,QString还有很多其他功能,熟悉这些常见的功能,有助于灵活地实现字符串处理功能。QString存储字符串采用的是Unicode码,每一个字符是一个16位的QChar,而不是8位的char,所以Qstring处理中文字符没有问题,而且一个汉字算作是一个字符。

QtCompany的博客 2741

Qt学习之路(50): QString

这段时间回家,一直没有来得及写,今天才发现博客的编辑器有了新版。还是先来试试新版编辑器的功能吧! 今天要说的是QString。之所以把QString单独拿出来,是因为string是很常用的一个数据结构,甚至在很多语言中,比如JavaScript,都是把string作为一种同int等一样的基本数据结构来实现的。 每一个GUI程序都需要string,这些string可以用在界...

weixin_34406796的博客 1793

Qt中QString转string中文乱码问题

QString与string相互转换可以用如下方法:QString::toStdString(); QString::fromStdString();数字转QString:QString::number();然而QString直接与string相互转换会出现中文乱码问题,为此Qt4中提供了三条语句QTextCodec::setCodecForTr(QTextCodec::codecForName("

shaomingshan的博客 2万+

Qt中QString与String的互相转换

Qt中QString与String的互相转换

龙木南的博客 9130

python中QStringList与QString、String互转

在使用pyQt进行GUI编程时,经常会遇到获取编辑框的内容等,其返回的是QString()和QStringList()类,简单的说,就是QT自己的String和list类,但是这些类不能和python的String和List类混用,需要转换一下。 1、QStringList转QString: from PyQt4.QtCore import *qList = QStringList

shawpan的专栏 1万+

学习QT之QString详解

学习QT之QString详解 QString类保存16位Unicode值,提供了丰富的操作、查询和转换函数。该类还进行了使用隐式共享、高效的内存分配策略等多方面的优化。 一、字符串常用操作 字符串的操作: 函数 说明 str.append(“xxx”) 在一个字符串的末尾追加另一个字符串 str.sprintf("%s",“HelloWorld”) 给字符串赋值为HelloW...

贝勒里恩的博客 5951

QT 字符&浮点数转字符串 string转const char* char转QString float转QString

char转QString QString str; tree[left].ch = 'A'; str = QString(tree[left].ch);//字符转字符串 std::string str2 = str.toStdString();//QString转string const char* ch = str2.c_str();//string转const char* painter.drawText(leftx,lefty,tr(ch)); float转QString QString str1;

weixin_44813559的博客 2596

Python环境搭建和LabVIEW中的调用

本文主要介绍Python相关的环境搭建、Anaconda的使用以及在LabVIEW中调用Python的方法。

lvxisi的博客 6390

QString 和 std::string 转换

QString to std::string One of the things you should remember when converting QString to std::string is the fact that QString is UTF-16 encoded while std::string... May have any encodings. So the

#+! 1463

中科蓝讯AB536X/AB892X芯片开发避坑指南:Downloader配置中那些容易忽略的细节

本文详细解析中科蓝讯AB536X/AB892X芯片开发中Downloader配置的关键细节,包括软开关机实现、触摸灵敏度调试、量产校频等常见问题。特别针对无PR口芯片的替代方案、触摸参数优化、校频流程等易忽略环节提供实用解决方案,帮助开发者规避量产风险,提升开发效率。

weixin_30687051的博客 475

Layout常见错误汇总-不定时更

1、在做LVS时,出现中断错误 解决方法: 重新建立新的schematic和layout文件,对应好其中的元器件,同时两个文件的名字也要对应好“schematic”和“layout”,其他名字的话软件找不到如何对应。

weixin_38753095的博客 4万+

QString和std::string互转防止乱码的做法

QString str2qstr(const string str) { return QString::fromLocal8Bit(str.data()); } string qstr2str(const QString qstr) { QByteArray cdata = qstr.toLocal8Bit(); return string(cdata); }

weixin_42233791的博客 201

Cobalt Strike4.0安装包(内附中文版)

1.什么是 Cobalt Strike Cobalt Strike 是一个为对手模拟和红队行动而设计的平台,主要用于执行有目标的攻击和模拟高级威胁 者的后渗透行动。 Cobalt Strike已经不再使用MSF而是作为单独的平台使用,它分为客户端与服务端,服务端是一个,客户端可以有多个,可被团队进行分布式协团操作。集成了端口转发、扫描多模式端口Listener、Windows exe程序生成、W...

梦之序章的博客 2万+

第十九课、QString、string、char *、char[] 之间的转换方法

详细介绍 QString、string、char *、char[] 之间的转换方法及基本原理,并采用代码测试验证

Mr-Gui的博客 4797

LVGL 实战:虚拟列表与对象复用机制在嵌入式GUI中的性能优化

本文深入探讨LVGL虚拟列表与对象复用机制在嵌入式GUI中的性能优化实践。通过复用机制动态管理UI对象,大幅降低内存占用,实现无限滚动列表的流畅体验。文章详细解析核心算法、内存优化策略及跨平台适配技巧,帮助开发者在资源受限设备上高效处理大量数据展示。

rice5的博客 1106

Python对象的基本组成和内存示意图及引用的本质

在Python中,变量也称为:对象的引用(reference)。变量存储的就是对象的地址。变量不需要显式声明类型。根据变量引用的对象,Python解释器自动确定数据类型。一个内存块,拥有特定的值,支持特定类型的相关操作。变量位于:栈内存(压栈出栈等细节,后续再介绍)。⚠️Python是动态类型语言。变量通过地址引用了“对象”。

Calor13的博客 557

QString、Qbytearray、string的相互转换及相关问题

String和QString之间的转化可以按照如下进行: QString qstr; string str; str = qstr.toStdString(); qstr = QString::fromStdString(str); 但是这样会出现中文乱码的问题,可以按照如下进行处理: std::string cstr; QString qstring; //从std::stri...

HelloEarth_的博客 6855

GPU硬件架构与微架构深度解析34-GPU安全架构深度解析

现代GPU不仅是图形处理器,更是高性能计算平台,安全架构设计至关重要。内存加密- 保护数据在传输和存储时的安全安全启动- 确保固件和软件的完整性隔离机制- 防止不同应用间的数据泄露密钥管理- 安全存储和处理加密密钥。

2301_79143213的博客 99

QString与string的相互转换

1.QString转换Stringstring s = qstr.toStdString();2.String转换QStringQString qstr2 = QString::fromStdString(s);

qq_33485434的博客 11万+

传统方式部署 Hadoop 高可用集群

传统方式部署 Hadoop 高可用集群

寂夜了无痕的博客 265

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

QString、QLatin1String、QStringLiteral

QString提供了一个Unicode字符串,QString存储的是一串QChar,而QChar提供了16位的Unicode字符,后台使用隐式共享减少内存的开销。假设setObjectName参数列表是QString类型调用了QObject::setObjectName(const QString&)函数。这里有一个通过构造产生的从const char*到QString的隐式转换,一个新的QString对象产生,字符串数据拷贝,并将字符串从UTF-8转为UTF-16的unicode字符。怎么避免?

qq_52126538的博客 1385

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

QT基础 - QString 与 std::string 之间类型转换

QT基础: QSting与std::string间类型转换 QString qstr = QString::fromStdString(str); QString qstr = QString::fromLocal8Bit(QByteArray::fromRawData(str.c_str(), str.size())); std::string str = qstr.toLocal8Bit().constData(); QString str = QString("%1 %2).arg("1","2");

Adunn的专栏 1万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Qt Qstring转换为string

在QT与Opencv一起使用的时候打开图片的时候有个问题,Qt的字符串是Qstring格式的,这个格式不能直接用于Opencv的imread()函数,要转换成普通的string格式才可以进行读取这个图片再进行图片读取,再进行处理。 String和QString之间的转化 //从QString 到 std::string str = qstr.toStdString(); //从std::s...

__计算机小白__ 1万+

C++ Qt QString转string乱码的处理方法

QString在转string时,如果有中文,会出现乱码,例如下面的代码 #include <QCoreApplication> #include <QDebug> #include <string> #include <iostream> using namespace std; int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QString qstr

琅嬛福地 5446

QString、string、char * 相互转化

我的应用环境是Xcode,QT和Xcode结合使用的:黑色的是我用到过的,亲测可以。 其他的是转博客的,大家看着用。 https://blog.youkuaiyun.com/qq_39836658/article/details/78788218 1、QString 转换成char * QString path; const char *c_str = path.toUtf8(...

4月16!的博客 2071
上一篇: Hough变换检测直线和圆
下一篇: 3D建模与处理软件简介
yan_tai123
博客等级 码龄18年 41粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值