QString::number(0)
和 和有什么不一样((const char*) 0)
?
我想初始化一个QString
say phoneNumber
to null
。phoneNumber(QString::number(0))
两者都有效吗phoneNumber((const char*) 0)
?
要创建一个空值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()
.
#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
更喜欢。