Qt文档阅读笔记-QLatin1String解析及文本段跨行赋值
Posted IT1995
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt文档阅读笔记-QLatin1String解析及文本段跨行赋值相关的知识,希望对你有一定的参考价值。
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();
}
程序运行截图如下:
以上是关于Qt文档阅读笔记-QLatin1String解析及文本段跨行赋值的主要内容,如果未能解决你的问题,请参考以下文章
Qt文档阅读笔记-Simple Chat Example解析
Qt文档阅读笔记-Broadcast Sender Example解析
Qt文档阅读笔记-QtConcurrent Progress Dialog Example解析