- 浏览: 3412104 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
sonichy:
Qt5改动很多,要改改了。
基于QItemDelegate的例子1 SpinBoxDelegate -
我的主页6:
楼主,2.2子查询的分页方式:SELECT * FROM ar ...
Mysql 分页语句Limit用法 -
liguoqi:
非常感谢楼主的用心指导,工具以及图片例子都提供了 赞!
两款免费DCIOM 图像浏览软件介绍和DICOM图像例子供下载 -
liguoqi:
问下这个图片怎么解压损坏呀
两款免费DCIOM 图像浏览软件介绍和DICOM图像例子供下载 -
liguoqi:
楼主讲解的非常详细,还附带工具和图片例子,非常感谢
两款免费DCIOM 图像浏览软件介绍和DICOM图像例子供下载
QString stores a string of 16-bit QChars, where each QChar corresponds one Unicode 4.0 character.
一、初始化QString字符串
1)Char * 初始化
QString str = "Hello";
QString converts the const char * data into Unicode using the fromAscii() function.
2)QChar[]数组初始化
static const QChar data[4] = { 0x0055, 0x006e, 0x10e3, 0x03a3 }; QString str(data, 4);
也可以这样
QRegExp pattern; static const QChar unicode[] = { 0x005A, 0x007F, 0x00A4, 0x0060, 0x1009, 0x0020, 0x0020}; int size = sizeof(unicode) / sizeof(QChar); QString str = QString::fromRawData(unicode, size);
3)还可以通过risize()函数和每个QChar字符进行初始化
QString str; str.resize(4); str[0] = QChar('U'); str[1] = QChar('n'); str[2] = QChar(0x10e3); str[3] = QChar(0x03a3);
通过at()函数进行每个字符读取
QString str; for (int i = 0; i < str.size(); ++i) { if (str.at(i) >= QChar('a') && str.at(i) <= QChar('f')) qDebug() << "Found character in range [a-f]"; }
二、QString的操作函数 后续慢慢更新
QString str = "and"; str.prepend("rock "); // str == "rock and" str.append(" roll"); // str == "rock and roll" str.replace(5, 3, "&"); // str == "rock & roll" QString x = "free"; QString y = "dom"; x.append(y); // x == "freedom" x.insert(x.size(), y);//x == "freedom" QString str = "Meal"; str.insert(1, QString("ontr")); // str == "Montreal" QString s = "Montreal"; s.remove(1, 4); // s == "Meal" 移除1-4字符 QString str("LOGOUT\r\n"); str.chop(2); // str == "LOGOUT" 从字符串后面移除2字符 QString str = "Vladivostok"; str.truncate(4); // str == "Vlad" 到4截断字符 QString s = "Hello world"; s.resize(5); // s == "Hello" s.resize(8); // s == "Hello???" (where ? stands for any character) QString t = "Hello"; t += QString(10, 'X'); // t == "HelloXXXXXXXXXX" QString r = "Hello"; r = r.leftJustified(10, ' '); // r == "Hello " QString x = "Pineapple"; QString y = x.left(4); // y == "Pine" QString x = "Pineapple"; QString y = x.right(5); // y == "apple" QString str = "Pineapple"; str = str.rightJustified(5, '.', true); // str == "Pinea" QString str = "Bananas"; str.endsWith("anas"); // returns true str.endsWith("pple"); // returns false QString str = "Berlin"; str.fill('z'); // str == "zzzzzz" str.fill('A', 2); // str == "AA" 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 QString x = "crazy azimuths"; QString y = "az"; x.lastIndexOf(y); // returns 6 x.lastIndexOf(y, 6); // returns 6 x.lastIndexOf(y, 5); // returns 2 x.lastIndexOf(y, 1); // returns -1 QString x = "Nine pineapples"; QString y = x.mid(5, 4); // y == "pine" QString z = x.mid(5); // z == "pineapples" long a = 63; QString s = QString::number(a, 16); // s == "3f" QString t = QString::number(a, 16).toUpper(); // t == "3F" QString s = "Montreal"; s.remove(1, 4); // s == "Meal" QString t = "Ali Baba"; t.remove(QChar('a'), Qt::CaseInsensitive); // t == "li Bb" QString x = "Say yes!"; QString y = "no"; x.replace(4, 3, y); // x == "Say no!" QString str = "colour behaviour flavour neighbour"; str.replace(QString("ou"), QString("o")); // str == "color behavior flavor neighbor" QString str; //! [51] QString csv = "forename,middlename,surname,phone"; QString path = "/usr/local/bin/myapp"; // First field is empty QString::SectionFlag flag = QString::SectionSkipEmpty; str = csv.section(',', 2, 2); // str == "surname" str = path.section('/', 3, 4); // str == "bin/myapp" str = path.section('/', 3, 3, flag); // str == "myapp" //字符串转换成整型 QString str; str.setNum(1234); // str == "1234" //字符串转成整型 long a = 63; QString s = QString::number(a, 16); // s == "3f" QString t = QString::number(a, 16).toUpper(); // t == "3F" QString str = "a,,b,c"; QStringList list1 = str.split(","); // list1: [ "a", "", "b", "c" ] QStringList list2 = str.split(",", QString::SkipEmptyParts); // list2: [ "a", "b", "c" ] QString str = " lots\t of\nwhitespace\r\n "; str = str.trimmed(); // str == "lots\t of\nwhitespace" //判断字符串相等 int x = QString::compare("aUtO", "AuTo", Qt::CaseInsensitive); // x == 0 int y = QString::compare("auto", "Car", Qt::CaseSensitive); // y > 0 int z = QString::compare("auto", "Car", Qt::CaseInsensitive); // z < 0 Qstring 转换char*问题! 方法一: QString qstr("hello,word"); const char * p = qstr.toLocal8Bit().data(); 方法二: const char *p = qstr.toStdString().data(); //转换过来的是常量 方法三: QString str="abc"; char *ch; QByteArray ba = str.toLatin1() ch = ba.data();
三、更有效的构造 String
我们通常通过"+"连接多个子字符串,例如:
QString foo;
QString type = "long";
foo->setText(QLatin1String("vector<") + type + QLatin1String(">::iterator"));
if (foo.startsWith("(" + type + ") 0x"))
...
这种构造写法,没有任何错误,但是有一些隐藏的效率问题。从Qt4.6之后,我们就可以消除这些问题。
首先,多次使用"+"意味着多次进行内存分配。当你连接n个子字符串的时候,如果n>2,就会有n-1次内存分配。
其次,QLatin1String 并不在内存中保存它的长度,而是当你需要知道它的长度时候,直接调用qstrlen()函数。
在Qt4.6中,新建了一个内部模板类QStringBuilder ,它有一些可以帮助解决该问题的方法。这个类被当做内部的,并不出现在我们的帮助文档中,因为你的代码中并不会用到它。它的使用将会自动的,下面详细说一下。
QStringBuilder 使用表达式模板重新解释'%'操作符,这样当你使用'%'代替'+'符号,连接字符串的时候,多次连接子字符串将被推迟,直到最后整个字符串被确定。这个时候,这个字符串的大小就是已知的了。这个时候内存分配器,就会一次性的分配这个已知大小的空间,然后把各个子字符串一个个拷贝进来。
QLatin1Literal 是一个二级的内部类,它可以代替QLatin1String类。QLatin1String类因为兼容性的原因无法被改变。QLatin1Literal 存储了它的长度,因此当QStringBuilder 计算最后的字符串的大小时,可以节省时间。
另外还通过内联潜入和减少引用次数(通过QStringBuilder 创立的QString,引用数是1,而QString::append()需要额外的测试)提高效率。
有三种方式,可以使用这种改善string构造效率的方法。
直接方式就是包含QStringBuilder ,当你在任何地方用到它的时候。然后当连接字符串的时候,用'%'代替'+'。
#include <QStringBuilder>
QString hello("hello");
QStringRef el(&hello, 2, 3);
QLatin1String world("world");
QString message = hello % el % world % QChar('!');
另外一种:全局的方式,定义一个宏定义。然后用用'%'代替'+'
//使用快速连接
#define QT_USE_FAST_CONCATENATION
and use '%' instead of '+' for string concatenation everywhere.
第三种方式:最方便,但是并不是所有代码都会兼容。就是包含两个宏定义即可。
#define QT_USE_FAST_CONCATENATION
#define QT_USE_FAST_OPERATOR_PLUS
然后所有的'+'就会被当做QStringBuilder 的'%'执行。
但在Qt 4.8、5.0,这个宏已被新的QT_USE_QSTRINGBUILDER宏所替代。(只需要这一个宏,就可以自动把'+'当做'%'执行)
发表评论
-
Qt官网变更【2012】
2012-09-21 19:30 4117Qt最近被Digia完全收购,诺基亚这两年的不理不睬,没有魄力 ... -
【转】QT实现不规则窗体
2012-09-21 18:50 4887看到好文章,收藏一下: 看到网上有很多不规则窗体的实现 ... -
Qt应用程序如何使用DCMTK类库进行二次开发DICOM数据传输
2012-09-13 09:35 0参考文章: 1、Using DCMTK with ... -
【转】将QT开发的界面程序封装成DLL,在VC中成功调用
2012-09-11 10:33 20951最近手头的一个项目需要做一个QT界面,并且封装成DLL,然后 ... -
诺基亚挥别Qt,转手给Digia
2012-09-11 09:37 2756一家总部位于芬兰的IT业务供应商Digia今天宣布,已经签署了 ... -
Qt多线程间信号槽传递非QObject类型对象的参数
2012-09-07 15:29 21141一、以前就发现过这个问题: 在Qt项目中,有时候为了 ... -
QT样式表(QStyleSheet)
2012-08-17 10:37 17781QT样式表 (QStyleSheet) 作者:刘旭晖 ... -
FinalData磁盘文件恢复工具(绿色破解版)
2012-08-02 13:28 8438FinalData磁盘文件恢复工具(绿色破解版),使用起来很方 ... -
Eclipse Qt开发环境的建立【转】
2012-08-01 11:15 42901.下载Eclipse目前Eclipse+CDT已经可以 ... -
汽车辐射监测系统-Qt开发
2012-07-25 16:18 4611最近晚上抽空忙了两个月,才把一个小系统做完。虽然做的不是太完 ... -
Qt做发布版,解决声音和图片、中文字体乱码问题
2012-07-14 16:02 4787Qt做发布版,解决声音和图片、中文字体乱码问题 ... -
QTableView使用中的疑问,如何及时显示操作Model后的结果?
2012-06-01 14:52 0最终的解决方法:我正 ... -
【转】Qt QTableview使用
2012-06-01 09:49 9598QTableWidget是QT程序中常用的显示数 ... -
QTableView双击 单机事件信号
2012-06-01 09:47 22831双击QTableView的行,获取该行数据 代码 ... -
QMessageBox改变大小
2012-05-31 15:33 8336创建一个QMessageBox: QMessageBo ... -
更新QTableView中的进度条状态
2012-05-30 14:37 14702前段时间,我接触了,如何在一个QTableView中加入一个控 ... -
QThread 线程暂停 停止功能的实现
2012-05-29 11:56 12085为了实现Qt中线程的暂停运行,和停止运行的控制功能 需要在设 ... -
QT环境变量
2012-05-28 18:53 5519不知道为啥同事有台电脑,装完Qt-VS2008库,和VS Ad ... -
广告光
2012-05-24 18:33 0盈创广告联盟 http://www.yo114.cn/ ... -
Test
2012-05-24 18:22 2120Test<IMG SRC="cf08e32c2 ...
相关推荐
主要介绍了Qt基础开发之QString与QByteArray详细用法与区别及QString QByteArray互转,需要的朋友可以参考下
主要介绍了QString使用正则操作的接口实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
主要介绍了QString的常用方法(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
QString在2 /8/10/16进制之间转换 的源码例子,使用 Qt 5.12.7 编译通过.,介绍了 QString 的各个函数的使用,的 gui 的例子
https://blog.csdn.net/weixin_38887369/article/details/91047524 // 本开源项目介绍 https://blog.csdn.net/weixin_38887369 // 3. 版权所有 qq:2271590144,新月 4. 使用语言:c++...
转本文介绍了标准C/C++中的有关日期和时间的概念,并通过各种实例讲述了这些函数和数据结构的使用方法。笔者认为,和时间相关的一些概念是相当重要的,理解这些概念是理解各种时间格式的转换的基础,更是应用这些...
其的属性和功能的使用介绍;然后写了一个例子,用来实现和验证它的功能的一些属性和功能的用法。这里主要是数据的读取部分是使用到了QFileSystemModel类,然后分别使用QTreeView和QListView和ColumnView和QTableView...
在windows系统下用qt展示二维码。里面readme.txt介绍使用。 QString strSetQRC = "http://www.baidu.com"; widget->setQRData(strSetQRC, QRWidget::H_ERROR_LEVEL); //widget 为 QRWidget指针
主要介绍了json 字符串之间的相互转换 ,通过eval()函数可以将JSON字符串转化为对象,本需要的朋友可以参考下
\13.2 QString 334 \13.2.1 隐式共享 335 \13.2.2 内存分配策略 336 \13.2.3 操作字符串 336 \13.2.4 查询字符串数据 337 \13.2.5 字符串的转换 338 \13.3 QVariant 339 \13.4 Qt的算法 341 \13.5 正则...
\13.2 QString 334 \13.2.1 隐式共享 335 \13.2.2 内存分配策略 336 \13.2.3 操作字符串 336 \13.2.4 查询字符串数据 337 \13.2.5 字符串的转换 338 \13.3 QVariant 339 \13.4 Qt的算法 341 \13.5 正则表达式 342 \...
QTcpSocket ... QString header = QString("fileType:%1, fileName:%2, fileSize:%3;") 在哪里: %1可以是“附件”或“消息”; 对于邮件, %2为“ null”,对于发送的附件,对应的fileName; %3是邮件
infer类的对象在初始化时按行读取规则,使用QFile的readLine()函数,将每条规则转化为一个QString字符串并存入QVector容器中,提供给后去函数进行处理。知识库格式如图: - 不懂运行,下载完可以私聊问,可远程教学 ...
部分将会陆续介绍。 本实例主要演示上面几种标准对话框的使用,如下图所示 St andard dialog 文件对话框 颜色对话框 字体对话框 Hello wor1l! 在上图中,单击“文件对话框”按钮,会弹出文件选择对话框,选中的文件名将...
介绍:基于Qt QML的聚合直播盒子,实现了 采集,播放,用户注册,用户充值,到期续费,上滑下滑切换主播,主播下线自动跳过,自动在房间的第一个位置生成下载二唯码,添加屏蔽主播列表 等功能,用户充值用的是微信监听方式,...
我们主要介绍第一种。新建Qt Resources file, 将它命名为menu。其他默认。 8.添加完后如下图。可以看到添加的文件为menu.qrc。 9.我们最好先在工程文件夹里新建一个文件夹,如images,然后将需要的图标 文件放到...
在前面《MQTT服务器的搭建》一文中,我们介绍了EMQX。打开其帮助文档,我们可以看到: 很开心,作为一个主流的Qt软件开发者,看到了熟悉的基于Qt框架的MQTT客户端。你可以直接下载下来,按照说明文档编译、运行和...
1.这里主要是介绍,如何在c++中调用QML中的函数和设置QML中的属性的问题 2.具体代码 // UICtest.qml import Qt 4.7 Rectangle { id: mainWidget; width: 640 height: 480 function callbyc(v) { mainWidget...