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();
}
程序运行截图如下:
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/qq78442761/article/details/120838959
内容来源于网络,如有侵权,请联系作者删除!