Qt文档阅读笔记-QLatin1String解析及文本段跨行赋值

x33g5p2x  于2021-11-10 转载在 其他  
字(1.8k)|赞(0)|评价(0)|浏览(422)

QString的许多成员函数都被重载了,用于接收const char *。包括拷贝构造函数、分配符、操作符

insert()、replace()、indexOf()。上述的函数都被优化避免const char *传入后调用拷贝构造函数。

如下例子,假如str为QString。

if (str == "auto" || str == "extern"
          || str == "static" || str == "register") {
      ...
  }

会比下面这种操作更加的快:

if (str == QString("auto") || str == QString("extern")
          || str == QString("static") || str == QString("register")) {
      ...
  }

下面这种方式调用了4次QString的构造函数,会深拷贝里面的数据内容。

如果项目中定义了QT_NO_CAST_FROM_ASCII,就不能直接调用QString的const char *这个API。

在.pro文件中定义

DEFINES += QT_NO_CAST_FROM_ASCII

Qt提供了QLatin1String类,这个是对const char *的简单封装,使用QLatin1String的代码如下:

if (str == QLatin1String("auto")
          || str == QLatin1String("extern")
          || str == QLatin1String("static")
          || str == QLatin1String("register") {
      ...
  }

这种相似效率和

if (str == "auto" || str == "extern"
          || str == "static" || str == "register") {
      ...
  }

这种的一致。

QString(QLatin1String)的这个构造函数,使得开发越来越方便

QLabel *label = new QLabel(QLatin1String("MOD"), this);

下面是关于文本段跨行的赋值

有三种方式:

①每一行用引号引起了,在换行的地方加\斜线;

②每一行用引号引起了;

③R"()"包裹。

代码如下:

#include <QCoreApplication>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    const auto cmd1 = QLatin1String("Hello World"
                                    "Hello World"
                                    "Hello World"
                                    "Hello World");
    const auto cmd2 = QLatin1String(R"(Hello World
                                    Hello World
                                    Hello World
                                    Hello World)");

    const auto cmd3 = QLatin1String("Hello World"\
                                    "Hello World"\
                                    "Hello World"\
                                    "Hello World");

    const auto cmd4 = QString("Hello World\r\n"\
                                    "Hello World\r\n"\
                                    "Hello World\r\n"\
                                    "Hello World\r\n");

    qDebug() << "cmd1:" << cmd1;
    qDebug() << "cmd2:" << cmd2;
    qDebug() << "cmd3:" << cmd3;
    qDebug() << "cmd4:" << cmd4;

    return a.exec();
}

程序运行截图如下:

相关文章