- 浏览: 3446007 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
sonichy:
Qt5改动很多,要改改了。
基于QItemDelegate的例子1 SpinBoxDelegate -
我的主页6:
楼主,2.2子查询的分页方式:SELECT * FROM ar ...
Mysql 分页语句Limit用法 -
liguoqi:
非常感谢楼主的用心指导,工具以及图片例子都提供了 赞!
两款免费DCIOM 图像浏览软件介绍和DICOM图像例子供下载 -
liguoqi:
问下这个图片怎么解压损坏呀
两款免费DCIOM 图像浏览软件介绍和DICOM图像例子供下载 -
liguoqi:
楼主讲解的非常详细,还附带工具和图片例子,非常感谢
两款免费DCIOM 图像浏览软件介绍和DICOM图像例子供下载
转:http://www.cnblogs.com/li-hao/archive/2011/11/05/2237052.html
先要说的是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可以自动的对占用内存空间进行扩充,这种连接操作是恨迅速的。下面是这两个操作符的使用:
- QString str = "User: " ;
- str += userName + "\n" ;
QString的append()函数则提供了类似的操作,例如:
- str = "User: " ;
- str.append(userName);
- str.append("\n" );
C语言中有printf()函数作为格式化输出,QString则提供了一个sprintf()函数实现了相同的功能:
- str.sprintf("%s %.1f%%" , "perfect competition" , 100.0);
这句代码将输出:perfect competition 100.0%,同C语言的printf()一样。不过前面我们也见到了Qt提供的另一种格式化字符串输出的函数arg():
- str = QString("%1 %2 (%3s-%4s)" )
- .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()可以把数字转换成字符串。例如:
- QString str = QString::number(54.3);
你也可以使用非static函数setNum()来实现相同的目的:
- QString str;
- str.setNum(54.3);
而一系列的to函数则可以将字符串转换成其他基本类型,例如toInt(), toDouble(), toLong()等。这些函数都接受一个bool指针作为参数,函数结束之后将根据是否转换成功设置为true或者false:
- bool ok;
- double d = str.toDouble(&ok);
- if (ok)
- {
- // do something...
- } else {
- // do something...
- }
对于QString,Qt提供了很多操作函数,例如,使用mid()函数截取子串:
- QString x = "Nine pineapples" ;
- QString y = x .mid(5, 4); // y == "pine"
- QString z = x .mid(5); // z == "pineapples"
mid()函数接受两个参数,第一个是起始位置,第二个是取串的长度。如果省略第二个参数,则会从起始位置截取到末尾。正如上面的例子显示的那样。
函数left()和rigt()类似,都接受一个int类型的参数n,都是对字符串进行截取。不同之处在于,left()函数从左侧截取n个字符,而right()从右侧开始截取。下面是left()的例子:
- QString x = "Pineapple" ;
- QString y = x.left(4); // y == "Pine"
函数indexOf()返回字符串的位置,如:
- QString x = "sticky question" ;
- QString y = "sti" ;
- x.indexOf(y); // returns 0
- x.indexOf(y, 1); // returns 10
- x.indexOf(y, 10); // returns 10
- x.indexOf(y, 11); // returns -1
函数startsWith()和endsWith()可以检测字符串是不是以某个特定的串开始或结尾,例如:
- if (url.startsWith("http:" ) && url.endsWith(".png" ))
- {
- }
这段代码等价于
- if (url.left(5) == "http:" && url.right(4) == ".png" )
- {
- }
不过,前者要比后者更加清楚简洁,并且性能也更快一些。
QString还提供了replace()函数供实现字符串的替换功能;trimmed()函数去除字符串两侧的空白字符(注意,空白字符包括空 格、Tab以及换行符,而不仅仅是空格);toLower()和toUpper()函数会将字符串转换成小写大写字符串;remove()和 insert()函数提供了删除和插入字符串的能力;simplified()函数可以将串中的所有连续的空白字符替换成一个,并且把两端的空白字符去 除,例如" \t ”会返回一个空格" "。
将const char *类型的C风格字符串转换成QString也是很常见的需求,简单来说,QString的+=即可完成这个功能:
- str += " (1870)" ;
这里,我们将const char * 类型的字符串" (1870)"转换成为QString类型。如果需要显式的转换,可以使用QString的强制转换操作,或者是使用函数fromAscii()等。为了 将QString类型转成const char *字符串,需要进行两步操作,一是使用toAscii()获得一个QByteArray类型对象,然后调用它的data()或者constData()函 数,例如:
- printf("User: %s\n" , str.toAscii().data());
为了方便使用,Qt提供了一个宏qPrintable(),这个宏等价于toAscii().constData(),例如:
- printf("User: %s\n" , qPrintable(str));
我们调用QByteArray类上面的data()或者constData()函数,将获得QByteArray内部的一个const char*类型的字符串,因此,我们不需要担心内存泄漏等的问题,Qt会替我们管理好内存。不过这也暗示我们,注意不要使用这个指针太长时间,因为如果 QByteArray被delete,那么这个指针也就成为野指针了。如果这个QByteArray对象没有被放在一个变量中,那么当语句结束 后,QbyteArray对象就会被delete,这个指针也就被delete 了。
接下来说说QString和QByteArray之间的转换 ,这里说两种,都是从网上搜到的。
第一种,数据流的方式,这里只说从QByteArray转向QString。
QByteArray encodedString = "xxx";
QTextCodec *codec = QTextCodec::codecForName("KOI8-R");
QString string = codec->toUnicode(encodedString);
[另外]
char ch_str[10] = "搜索";
QString str = QString::fromLocal8Bit(ch_str);
第二种,常用的,网上看到的。
//常用参数类型:char *字符串, QByteArray字符数组, QString字符串
//需要转换:char * ---转--- QByteArray ---需要调用QByteArray类的构造函数
char* --------------QByteArray(const char*)-----------> QByteArray
char* str;
QByteArray byte(str);
char* --------------QString(const char*)-------------->QString
char* str;
QString string(str);
QByteArray -------------data()-------------------->char*
QByteArray byte;
char* str = byte.data();
QByteArray ------------QString()------------------->QString
QByteArray byte;
QString string(byte);
QString --------------toAscii()--------------------> QByteArray
QString string;
QByteArray byte = string.toAscii();
QString -------------qPrintable()------------------>char*
QString string;
char* str = qPrintable(string);
或QString --------toLatin1()------QByteArray----------data()--------->char*
QString string;
QByteArray ba=string.toLatin1();
const char* str = ba.data();
发表评论
-
更换博客地址告示
2012-12-03 18:56 2591更换博客地址告示 ... -
收款主页设计
2012-11-17 11:01 0文档信息 版权声明:自由转载-非商用-非衍生- ... -
10个精选国外免费空间
2012-11-12 16:06 6329最近想申请一个免费空间,发现国内基本没有。。。。唉。 ... -
长光所考博信息
2012-09-24 14:25 2699总结一下,以后有个奔头。。搞科研的收入太微薄了。唉。。。 ... -
The file contains a character that cannot be represented in the current code pag
2012-08-17 10:17 6325vs2008 打开网上下载的Qt项目,结果编译时无法通过,出 ... -
64位操作系统,编译程序出现X86和X64的冲突
2012-08-16 20:10 0问题1:1>QtGuid4.lib(QtGuid4.d ... -
通用日志系统开发【转】
2012-08-06 15:20 42411.前言 中大型软件项 ... -
U盘制作WinPE系统【转】
2012-07-27 11:36 2522不带光驱的笔记本的网友和没有光驱的台式机的网友如何安 ... -
博客文章标题横线框
2012-06-28 11:47 0分析 ... -
触摸屏介绍
2012-05-30 16:03 1979有一个项目,需要购买一台触摸屏设备。 了解一下触摸屏的基础知 ... -
有谁知道高速大数据量无线传输技术
2012-05-28 11:53 2506有谁知道高速大数据量无线传输技术? 想了解一下无线传输 ... -
自由在博客里插入广告,有钱你不赚吗???
2012-05-25 18:37 01、一直在ITeye里写技 ... -
自由在博客里插入广告,有钱你不赚吗???
2012-05-25 15:22 6632其实这些广告也没啥意 ... -
支持javascript的博客汇总
2012-05-25 09:27 2485写这篇文章的目的主要是为想在公共博客上布置广告的朋友提供一些参 ... -
支持js代码的博客有哪些?
2012-05-25 09:20 32971、支持js代码的博客谷歌博客, 雅虎奇摩,博客大巴,jimd ... -
VS2008无法下断点调试的原因
2012-05-02 11:18 19327VS2008单步调试时出错,原来的断点处显示一个空心圆加 ... -
VS2008无法下断点调试的若干解决办法
2012-05-02 09:19 4040我使用了第一种方法,暂时恢复了断点调试。 调试程 ... -
【转】串口通讯—通信协议
2012-02-29 00:11 2640转:http://cs.nju.edu.cn/y ... -
Ankhsvn 改名出错
2012-02-16 18:32 3173总结只改变文件名字大小写的最终解决方法。 这种只需要改 ... -
C++接口实现总结
2012-02-04 14:51 32920网上的例子,稍微有点错误。我给更改一下,附件上有源码!如有错误 ...
相关推荐
此为QString无损转char*和unsigned char* 。 当QString内容包含汉字时,转换char*等会发生失败。此接口解决了该问题。使用后char*与unsigned char*的qDebug()输出与QString输出结果相同。 注意,该函数返回unsigned ...
然而,在Qt框架中,我们通常使用QString类来处理字符串。当Qt代码需要与非Qt的Windows API交互时,如调用WinAPI函数,就需要将QString转换成TCHAR*。本文将详细讲解如何有效地进行这种转换,并确保编译运行通过。 ...
一、QString赋值给char* 例如: QString qstr; char *str = qstr.toLatin1().data();//这样便把qstr中的值传给了str 二 、char [] 赋值给string char str[32]; string str2(str);//这样便把str中的值传给...
在Qt中,QString和QByteArray之间的转换是相当直观的: 1. `char *`到`QByteArray`: 可以通过QByteArray的构造函数实现,如`QByteArray(byteString, length)`,其中`byteString`是C风格字符串,`length`是字符串...
总结来说,Qt提供了便捷的方法在QString、QByteArray、int和double之间进行转换,这在处理各种数据类型时非常有用。在实际编程中,根据需求选择合适的转换方式,并注意检查转换的正确性,以确保数据的准确无误。
- **char*到QString**: 字符串指针可以直接转换为QString。 - 示例:`const char* ch = "Hello"; QString str = ch;` #### 2. QByteArray与C++基本类型之间的转换 ##### 2.1 QByteArray到char*的转换 - **...
Qt基础开发之QString与QByteArray详细用法与区别及QString QByteArray互转 Qt基础开发中的QString与QByteArray是两个非常重要的类,它们都可以用来处理字符串或字节流,但是它们之间有着很大的区别。 首先,...
本文将详细介绍QT中各种类型之间的转换方法,包括但不限于`char*`与`QString`之间的转换、`QByteArray`与`QString`之间的转换等。 #### 一、`char*`与`QString`之间的转换 **1.1 `char*`转为`QString`** - **直接...
本文将详细介绍Qt中的数据类型转换方法,包括基本的数据类型如字符串(`QString`)与数字之间的转换、字符数组与字符串之间的转换等。 #### 二、字符串(`QString`)与数字之间的转换 1. **`QString`转`double`** ...
- **QString**: 是QT框架中用于处理字符串的核心类,它提供了丰富的API来处理字符串的各种操作。 - **char***: 在C/C++中,`char*`通常用于表示一个字符数组的指针,可以用来存储字符串。 - **std::string**: C++...
当你需要将Qt中的QString类型转换为C++标准库的std::string时,可以使用`toStdString()`方法。例如: ```cpp QString qtString = "Qt String"; std::string cPlusPlusString = qtString.toStdString(); ``` 2....
在Qt库中,QByteArray是一种非常重要的数据类型,它用于处理和存储字节序列。QByteArray既可以作为字符串处理,又可以作为二进制数据处理,这使得它在各种场景下都十分灵活。在这个主题中,我们将深入探讨QByteArray...
QT 中 QString 类中文详解 在 QT 框架中,QString 是一个非常重要的类,它提供了许多有用的函数来处理字符串。其中,section 函数是一个非常有用的函数,它可以将一个字符串分割成多个部分,并返回指定的部分。 ...
1. **从char *转换到QString**: ```cpp char *chUser = "root"; QString qUser = QString::fromLatin1(chUser); ``` 使用`QString::fromLatin1()`方法可以方便地将char *类型的字符串转换为QString对象。需要...
• Internationalization • Preparing for localization • Localization • Localization process • Qt Linquist tool • Testing • QTestLib
- `QTextCodec`是QT中用于文本编码转换的核心类。 - 提供了多种方法来转换不同的编码格式。 #### 三、编码设置 1. **设置默认编码** - 可以通过`QTextCodec::setCodecForCStrings()`方法设置默认的编码方式。 ...
本文将详细介绍如何在QT中使用QString进行ASCII转换,并探讨相关的知识背景和技术细节。 首先,ASCII(美国标准信息交换代码)是一种字符编码标准,包含了128个字符,每个字符由一个7位的二进制数表示,可以转换为...
这是因为QString是Qt中的Unicode字符串,而char*通常用于表示ASCII或本地编码的字符串。转换时应确保正确的编码处理。可以使用QTextCodec类进行转换,例如: ```cpp QTextCodec *codec = QTextCodec::codecForName...