20

QString::number(0)和 和有什么不一样((const char*) 0)

我想初始化一个QStringsay phoneNumberto nullphoneNumber(QString::number(0))两者都有效吗phoneNumber((const char*) 0)

4

2 回答 2

48

要创建一个空值QString,只需默认初始化它:

QString phoneNumber;

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

phoneNumber = QString();

请注意,这QString::number(0)绝对不是null - 它创建一个带有 value 的 QString "0"

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

您还应该了解以下 Qt 文档

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

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

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

isNull()除了将空字符串视为空字符串之外的所有函数。例如,toAscii().constData()返回一个指向 '\0'空字符串(不是空指针)的字符的指针,并 QString()比较等于QString("")。我们建议您始终使用该isEmpty()功能并避免使用isNull().

于 2012-03-15T17:43:23.537 回答
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();
}

输出:

true
""

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

于 2014-09-14T08:41:44.887 回答