`
qimo601
  • 浏览: 3446025 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

QString介绍

    博客分类:
  • Qt
阅读更多

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宏所替代。(只需要这一个宏,就可以自动把'+'当做'%'执行)

分享到:
评论

相关推荐

    QString转ASCII(uint).txt

    本文将详细介绍如何在QT中使用QString进行ASCII转换,并探讨相关的知识背景和技术细节。 首先,ASCII(美国标准信息交换代码)是一种字符编码标准,包含了128个字符,每个字符由一个7位的二进制数表示,可以转换为...

    QString 常用功能应用示例

    本资源是在Qt_5_12_6_MinGW_64环境下的QString 常用功能应用示例的工程文件,QString是Qt编程中常用的类,除了用作数字量的输入...这里主要介绍了QString常用接口,通过本资源的应用示例,可以掌握QString的常用功能。

    QString使用正则操作的接口实现

    介绍QString使用正则操作的接口。 Qt 5.0引入QRegularExpression,相比于QRegExp,前者修复了很多bugs,功能上也是兼容于QRegExp。推荐使用QRegularExpression。 contains 正则表达式rx是否与字符串中的某个地方...

    Qt中所有类型转换

    以上介绍了Qt中常见类型之间的转换方法。理解并熟练掌握这些转换技巧对于开发高质量的Qt应用程序至关重要。无论是从QString到其他类型,还是从其他类型到QString,都有多种方法可供选择。开发者可以根据实际需求和上...

    QT中 各类型的转换

    本文将详细介绍QT中各种类型之间的转换方法,包括但不限于`char*`与`QString`之间的转换、`QByteArray`与`QString`之间的转换等。 #### 一、`char*`与`QString`之间的转换 **1.1 `char*`转为`QString`** - **直接...

    Qt数据类型的转换

    本文将详细介绍Qt中的数据类型转换方法,包括基本的数据类型如字符串(`QString`)与数字之间的转换、字符数组与字符串之间的转换等。 #### 二、字符串(`QString`)与数字之间的转换 1. **`QString`转`double`** ...

    QT中文转换方法

    本文主要介绍如何在QT中实现中文字符串的转换,以及如何在`QString`与C/C++中的`char*`或`std::string`之间进行相互转换。 #### 关键概念 - **QString**: 是QT框架中用于处理字符串的核心类,它提供了丰富的API来...

    QT基本类型及使用说明

    ### QT基本类型及使用说明 ...以上介绍了Qt中QString的各种操作方法以及不同类型之间的转换方式,这些方法在开发Qt应用程序时非常有用。通过灵活运用这些技巧,可以更高效地处理字符串和其他数据类型的问题。

    Qt对Excel表的操作代码

    下面将详细介绍如何使用Qt进行Excel表格的读写和格式设置。 首先,要使用Qt操作Excel,需要在项目文件中包含必要的库,并确保系统已经安装了Microsoft Office,因为我们将依赖于Office的COM接口。在`.pro`文件中...

    数字字母中文排序

    本文介绍了一种利用正则表达式判断字符类型的方法,并结合具体的排序算法实现了数字、字母与中文字符的排序功能。这种方法不仅可以应用于Web开发中的表格排序,还可以广泛地用于各种需要处理多种字符类型的应用场景...

    Qt常用类介绍

    - `QString(const QString &other);`:拷贝构造。 - `QString(const char *s, int size = -1);`:由普通字符数组构造。 #### 三、窗口类详解 窗口类是指那些从`QWidget`派生而来的类,它们是构建用户界面的基础...

    Qt 格式化字符串 - Avatarx - 博客园1

    下面将详细介绍这三种方法以及它们的使用场景。 1. **QString::arg()**: `QString::arg()` 是Qt中推荐的字符串格式化方法,因为它具有可扩展性,支持插入多个参数,并且相对安全。在上述例子中,`arg()` 方法被...

    Qt中整形数组转换成字符串的问题.docx

    以下是一个详细的步骤介绍: 首先,要创建一个整型数组,可以使用 `QVector` 类,这是一个动态大小的数组容器。例如,创建一个包含 10 个整数的数组: ```cpp QVector&lt;int&gt; vector(10); ``` 要访问这个数组的原始...

    QT常用控件编程.pdf

    QT常用控件编程涉及到多个基础组件的使用和交互,下面将详细介绍这些控件及其相关编程知识。 1. **QString与char\*之间的转换**: - `QString`是QT中的一个类,用于处理Unicode字符串。从`char*`到`QString`的转换...

    qt获取本地硬盘cpu主板序列号并生成随机码

    以下将详细介绍如何使用Qt和C++来完成这个任务。 首先,获取硬盘序列号。在Windows系统中,可以使用QProcess类来执行命令行工具,例如`wmic`,它提供了查询系统硬件信息的能力。下面是一个简单的示例: ```cpp ...

    Qt 不用自带的工具来实现多语言支持嵌入式,亲测有用,留下备用

    本文将详细介绍如何在不依赖Qt自带工具的情况下实现多语言支持。 首先,我们需要理解多语言支持的基本原理。在Qt中,这通常涉及创建翻译文件(.qm),它们是二进制格式的,由Qt Linguist这样的工具生成。每个.qm...

    读写ini文件的代码

    本篇文章将通过一个具体的示例,详细介绍如何在C++中实现对INI文件的读取与写入操作。 #### 二、INI文件的基本结构 INI文件通常由多个节(section)组成,每个节内部包含一系列键值对(key-value)。例如: ```ini ...

    linux QT显示中文

    - 可以使用`QString::fromLocal8Bit()`方法将`char *`转换为`QString`。 ```cpp QString str; str = str.fromLocal8Bit("中文"); QPushButton hello(str, 0); ``` 2. **toUnicode与toLocal8Bit** - `...

    QT/C++ 一次性读取指定基本格式下的配置文件(.ini)的全部类型的所需键值对

    本篇将详细介绍如何一次性读取`.ini`配置文件中的所有指定键值对,并按照特定顺序返回。 QT库提供了QSettings类,它是用来读写系统或用户特定的配置文件的。QSettings类可以处理多种格式的配置文件,包括`.ini`格式...

Global site tag (gtag.js) - Google Analytics