如何将QString初始化为null?

时间:2012-03-15 17:26:43

标签: c++ qstring

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

我想初始化QStringphoneNumbernullphoneNumber(QString::number(0))phoneNumber((const char*) 0)都会有效吗?

2 个答案:

答案 0 :(得分:40)

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

QString phoneNumber;

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

phoneNumber = QString();

请注意,QString::number(0)肯定 null - 它会创建一个值为"0"的QString。

您还可以使用QString指针初始化NULL,但除非您传递指针,否则我不会推荐它,无论它是否为NULL(即,它有时可能指向C字符串),因为它是不必要的。

您还应该了解following Qt docs

  

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

     

由于历史原因,QString区分空字符串   和一个空字符串。空字符串是初始化的字符串   使用QString的默认构造函数或传递(const char *)0   到构造函数。空字符串是大小为0的任何字符串。为null   string始终为空,但空字符串不一定为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
     

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

答案 1 :(得分:14)

#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