如何将QString初始化为null?

23

QString::number(0)((const char*) 0)的区别是什么?

我想将一个QString,比如说phoneNumber初始化为null。使用phoneNumber(QString::number(0))phoneNumber((const char*) 0)两种方法都可以实现吗?

2个回答

54

要创建一个空的QString,只需使用默认初始化:

QString phoneNumber;

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

phoneNumber = QString();
请注意,QString::number(0)绝对不是空值 - 它创建了一个值为"0"的QString。
您也可以使用NULL指针初始化QString,但我不建议这样做,除非您无论如何都要传递指针(即,它有时可能指向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()函数外,所有的函数都将null字符串视为空字符串。例如,对于null字符串,toAscii().constData()返回指向'\0'字符的指针(不是null指针),并且QString()QString("")相等。我们建议您始终使用isEmpty()函数,避免使用isNull()


Michael,感谢您的回复,但有一件事对我不清楚——str.clear()会留下空字符串还是被置为null。如果是空字符串,有没有办法将其置为null? - yatsek
QString::clear() 将字符串设置为 null(即,在 str.clear() 之后,str.isNull() 将返回 true)。 - Michael Burr

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
""

迈克尔·伯尔的解决方案当然也是正确的...但我更喜欢QString::null


2
点赞明确包含 QString::null。我喜欢它消除了任何/所有意图上的歧义。 - rob
1
@RobertOliveira 同意!直到现在我才知道这件事。 - Andrew
4
Qt Creator现在宣布QString::null已经被弃用,建议使用String()替代。 - Ronan Paixão
1
@GwynethLlewelyn 请查看被接受的答案以获取详细信息。本质上,您只需使用默认初始化程序即可。简单地说,这应该可以工作:QString phoneNumber; - Ronan Paixão
@RonanPaixão 啊,我明白了!但我的问题实际上是我正在重构旧代码,其中一个类方法有一些默认值——其中之一是QString!我想知道,我该如何处理它?(我的解决方法:暂时忽略默认值,交叉手指并希望它能工作……不知道为什么!) - Gwyneth Llewelyn
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接