如何将QString初始化为null?

use*_*969 17 c++ qstring

QString::number(0)和之间有什么区别((const char*) 0)

我想初始化一个QStringphoneNumbernull.威尔phoneNumber(QString::number(0))phoneNumber((const char*) 0)两者都有效吗?

Mic*_*urr 42

要创建null,QString只需将其初始化为:

QString phoneNumber;

// or if you already have a QString variable and want to 'clear' it:

phoneNumber = QString();
Run Code Online (Sandbox Code Playgroud)

注意,这QString::number(0)肯定不是 null - 它创建一个带有值的QString "0".

你也可以QStringNULL指针初始化它,但我不推荐它,除非你传递一个指针,无论它是否有效NULL(即,它有时可能指向一个C字符串),因为它是不必要的.

您还应该了解以下Qt文档:

空字符串和空字符串之间的区别

由于历史原因,QString区分空字符串和空字符串.空字符串是使用QString默认构造函数或传递(const char *)0 给构造函数初始化的字符串.空字符串是大小为0的任何字符串.空字符串始终为空,但空字符串不一定为null:

QString().isNull();               // returns true
QString().isEmpty();              // returns true

QString("").isNull();             // returns false
QString("").isEmpty();            // returns true

QString("abc").isNull();          // returns false
QString("abc").isEmpty();         // returns false
Run Code Online (Sandbox Code Playgroud)

isNull()处理空字符串以外的所有函数与空字符串相同.例如,toAscii().constData()返回指向 '\0'空字符串(不是空指针)的字符的指针,并 QString()比较等于QString("").我们建议您始终使用该isEmpty()功能并避免使用isNull().


imm*_*art 15

#include <QCoreApplication>
#include <QString>
#include <QDebug>

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

    QString name(QString::null);
    // or QString name = QString::null;
    // or QString name;

    qDebug() << name.isNull();
    qDebug() << name;

    return a.exec();
}
Run Code Online (Sandbox Code Playgroud)

输出:

true
""
Run Code Online (Sandbox Code Playgroud)

Michael Burr的解决方案当然也是正确的...但我QString::null更喜欢.

  • 竖起大拇指明确包括QString :: null.我喜欢它消除意图中任何/所有歧义的方式. (2认同)
  • Qt Creator 现在宣布“QString::null”已弃用。它建议改用“String()”。 (2认同)