QString::number(0)
和((const char*) 0)
的区别是什么?
我想将一个QString
,比如说phoneNumber
初始化为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)
绝对不是空值 - 它创建了一个值为"0"
的QString。NULL
指针初始化QString
,但我不建议这样做,除非您无论如何都要传递指针(即,它有时可能指向C字符串),因为这是不必要的。空字符串和空值之间的区别
由于历史原因,
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()
。
#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
。
QString::null
已经被弃用,建议使用String()
替代。 - Ronan PaixãoQString phoneNumber;
。 - Ronan PaixãoQString
!我想知道,我该如何处理它?(我的解决方法:暂时忽略默认值,交叉手指并希望它能工作……不知道为什么!) - Gwyneth Llewelyn
QString::clear()
将字符串设置为 null(即,在str.clear()
之后,str.isNull()
将返回true
)。 - Michael Burr