QStringLiteral QLatin1String

QStringLiteral 是Qt5中新引入的一个用来从“字符串常量”创建QString对象的宏

ui->passwordEdit->setPlaceholderText(QStringLiteral("密码"));

QLatin1String类对US-ASCII/Latin-1编码的字符串进行了简单封装,可理解为关于const char*的一个浅封装。


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

上面的代码执行会比下面的代码执行快很多

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

因为在第二部分的代码中会构造四个临时的QString对象,并复制字符串中的值。

在程序中定义了QT_NO_CAST_FROM_ASCII的应用程序是无法使用QString的const char*相关的API函数,因此Qt提供了QLatin1String类来更高效的利用const char*的类型,它就是一个关于const char*的一个浅封装。如果利用QLatin1String类来写上述的程序就是


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

虽然在代码输入的时候有点长,但是它的执行效率和上面第一段的代码一样,同时也比使用QString::fromLatin1()转换来的快。

得益于QString(const QLatin1String&)这个构造函数,QLatin1String可以在任何需要QString对象的地方使用,比如:

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

QString str = "hello" 报错:

在程序中定义了QT_NO_CAST_FROM_ASCII的应用程序是无法使用QString的const char*相关的API函数,因此Qt提供了QLatin1String类来更高效的利用const char*的类型,它就是一个关于const char*的一个浅封装。

只要在 .pro文件里面


DEFINES += \
    QT_NO_CAST_FROM_ASCII

char*就不能转换成QString,这时候就可以用 QLatin1String来代替在所有需要QString的地方。

 

 

你可能感兴趣的:(QT)