- 浏览: 3446025 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
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 4215Qt最近被Digia完全收购,诺基亚这两年的不理不睬,没有魄力 ... -
【转】QT实现不规则窗体
2012-09-21 18:50 4991看到好文章,收藏一下: 看到网上有很多不规则窗体的实现 ... -
Qt应用程序如何使用DCMTK类库进行二次开发DICOM数据传输
2012-09-13 09:35 0参考文章: 1、Using DCMTK with ... -
【转】将QT开发的界面程序封装成DLL,在VC中成功调用
2012-09-11 10:33 21121最近手头的一个项目需要做一个QT界面,并且封装成DLL,然后 ... -
诺基亚挥别Qt,转手给Digia
2012-09-11 09:37 2858一家总部位于芬兰的IT业务供应商Digia今天宣布,已经签署了 ... -
Qt多线程间信号槽传递非QObject类型对象的参数
2012-09-07 15:29 21382一、以前就发现过这个问题: 在Qt项目中,有时候为了 ... -
QT样式表(QStyleSheet)
2012-08-17 10:37 17894QT样式表 (QStyleSheet) 作者:刘旭晖 ... -
FinalData磁盘文件恢复工具(绿色破解版)
2012-08-02 13:28 8591FinalData磁盘文件恢复工具(绿色破解版),使用起来很方 ... -
Eclipse Qt开发环境的建立【转】
2012-08-01 11:15 43821.下载Eclipse目前Eclipse+CDT已经可以 ... -
汽车辐射监测系统-Qt开发
2012-07-25 16:18 4693最近晚上抽空忙了两个月,才把一个小系统做完。虽然做的不是太完 ... -
Qt做发布版,解决声音和图片、中文字体乱码问题
2012-07-14 16:02 4866Qt做发布版,解决声音和图片、中文字体乱码问题 ... -
QTableView使用中的疑问,如何及时显示操作Model后的结果?
2012-06-01 14:52 0最终的解决方法:我正 ... -
【转】Qt QTableview使用
2012-06-01 09:49 9676QTableWidget是QT程序中常用的显示数 ... -
QTableView双击 单机事件信号
2012-06-01 09:47 23101双击QTableView的行,获取该行数据 代码 ... -
QMessageBox改变大小
2012-05-31 15:33 8446创建一个QMessageBox: QMessageBo ... -
更新QTableView中的进度条状态
2012-05-30 14:37 14863前段时间,我接触了,如何在一个QTableView中加入一个控 ... -
QThread 线程暂停 停止功能的实现
2012-05-29 11:56 12205为了实现Qt中线程的暂停运行,和停止运行的控制功能 需要在设 ... -
QT环境变量
2012-05-28 18:53 5593不知道为啥同事有台电脑,装完Qt-VS2008库,和VS Ad ... -
广告光
2012-05-24 18:33 0盈创广告联盟 http://www.yo114.cn/ ... -
Test
2012-05-24 18:22 2190Test<IMG SRC="cf08e32c2 ...
相关推荐
本文将详细介绍如何在QT中使用QString进行ASCII转换,并探讨相关的知识背景和技术细节。 首先,ASCII(美国标准信息交换代码)是一种字符编码标准,包含了128个字符,每个字符由一个7位的二进制数表示,可以转换为...
本资源是在Qt_5_12_6_MinGW_64环境下的QString 常用功能应用示例的工程文件,QString是Qt编程中常用的类,除了用作数字量的输入...这里主要介绍了QString常用接口,通过本资源的应用示例,可以掌握QString的常用功能。
介绍QString使用正则操作的接口。 Qt 5.0引入QRegularExpression,相比于QRegExp,前者修复了很多bugs,功能上也是兼容于QRegExp。推荐使用QRegularExpression。 contains 正则表达式rx是否与字符串中的某个地方...
以上介绍了Qt中常见类型之间的转换方法。理解并熟练掌握这些转换技巧对于开发高质量的Qt应用程序至关重要。无论是从QString到其他类型,还是从其他类型到QString,都有多种方法可供选择。开发者可以根据实际需求和上...
本文将详细介绍QT中各种类型之间的转换方法,包括但不限于`char*`与`QString`之间的转换、`QByteArray`与`QString`之间的转换等。 #### 一、`char*`与`QString`之间的转换 **1.1 `char*`转为`QString`** - **直接...
本文将详细介绍Qt中的数据类型转换方法,包括基本的数据类型如字符串(`QString`)与数字之间的转换、字符数组与字符串之间的转换等。 #### 二、字符串(`QString`)与数字之间的转换 1. **`QString`转`double`** ...
本文主要介绍如何在QT中实现中文字符串的转换,以及如何在`QString`与C/C++中的`char*`或`std::string`之间进行相互转换。 #### 关键概念 - **QString**: 是QT框架中用于处理字符串的核心类,它提供了丰富的API来...
### QT基本类型及使用说明 ...以上介绍了Qt中QString的各种操作方法以及不同类型之间的转换方式,这些方法在开发Qt应用程序时非常有用。通过灵活运用这些技巧,可以更高效地处理字符串和其他数据类型的问题。
下面将详细介绍如何使用Qt进行Excel表格的读写和格式设置。 首先,要使用Qt操作Excel,需要在项目文件中包含必要的库,并确保系统已经安装了Microsoft Office,因为我们将依赖于Office的COM接口。在`.pro`文件中...
本文介绍了一种利用正则表达式判断字符类型的方法,并结合具体的排序算法实现了数字、字母与中文字符的排序功能。这种方法不仅可以应用于Web开发中的表格排序,还可以广泛地用于各种需要处理多种字符类型的应用场景...
- `QString(const QString &other);`:拷贝构造。 - `QString(const char *s, int size = -1);`:由普通字符数组构造。 #### 三、窗口类详解 窗口类是指那些从`QWidget`派生而来的类,它们是构建用户界面的基础...
下面将详细介绍这三种方法以及它们的使用场景。 1. **QString::arg()**: `QString::arg()` 是Qt中推荐的字符串格式化方法,因为它具有可扩展性,支持插入多个参数,并且相对安全。在上述例子中,`arg()` 方法被...
以下是一个详细的步骤介绍: 首先,要创建一个整型数组,可以使用 `QVector` 类,这是一个动态大小的数组容器。例如,创建一个包含 10 个整数的数组: ```cpp QVector<int> vector(10); ``` 要访问这个数组的原始...
QT常用控件编程涉及到多个基础组件的使用和交互,下面将详细介绍这些控件及其相关编程知识。 1. **QString与char\*之间的转换**: - `QString`是QT中的一个类,用于处理Unicode字符串。从`char*`到`QString`的转换...
以下将详细介绍如何使用Qt和C++来完成这个任务。 首先,获取硬盘序列号。在Windows系统中,可以使用QProcess类来执行命令行工具,例如`wmic`,它提供了查询系统硬件信息的能力。下面是一个简单的示例: ```cpp ...
本文将详细介绍如何在不依赖Qt自带工具的情况下实现多语言支持。 首先,我们需要理解多语言支持的基本原理。在Qt中,这通常涉及创建翻译文件(.qm),它们是二进制格式的,由Qt Linguist这样的工具生成。每个.qm...
本篇文章将通过一个具体的示例,详细介绍如何在C++中实现对INI文件的读取与写入操作。 #### 二、INI文件的基本结构 INI文件通常由多个节(section)组成,每个节内部包含一系列键值对(key-value)。例如: ```ini ...
- 可以使用`QString::fromLocal8Bit()`方法将`char *`转换为`QString`。 ```cpp QString str; str = str.fromLocal8Bit("中文"); QPushButton hello(str, 0); ``` 2. **toUnicode与toLocal8Bit** - `...
本篇将详细介绍如何一次性读取`.ini`配置文件中的所有指定键值对,并按照特定顺序返回。 QT库提供了QSettings类,它是用来读写系统或用户特定的配置文件的。QSettings类可以处理多种格式的配置文件,包括`.ini`格式...