2012-03-15 5089 views
13

是什麼QString::number(0)((const char*) 0)之間的區別?如何初始化一個QString爲null?

我想初始化一個QString,例如phoneNumbernull。請問phoneNumber(QString::number(0))phoneNumber((const char*) 0)都可以工作嗎?

回答

36

要創建一個空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,但我不會推薦它,除非你傳遞一個指針,無論它是NULL與否(即,它可能有時指向C字符串),因爲它是不必要。

您也應該瞭解following Qt docs

區分空和空字符串

由於歷史原因之間,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()

+0

邁克爾感謝您的答覆,但有一點我不清楚 - 不str.clear()離開空字符串或者廢止的一個。如果有空有一種方法來取消它? – yatsa 2012-03-30 13:31:26

+0

'的QString ::明確()'設置字符串爲空(即str.clear後'()',str.isNull()將返回TRUE;)。 – 2012-03-30 15:06:44

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

邁克爾Burr`s解決方法當然也是正確的。但我喜歡QString::null更多。

+2

爲顯式包含QString :: null而豎起大拇指。我喜歡它消除意圖中任何/所有含糊不清的方式。 – rob 2015-09-24 20:59:45

+1

@RobertOliveira同意!直到現在才知道這件事。 – Andrew 2016-04-24 14:26:08