2012-03-15 28 views
13

Sự khác biệt giữa QString::number(0)((const char*) 0) là gì?cách khởi tạo QString thành null?

Tôi muốn khởi tạo số QString nói phoneNumber đến null. Sẽ phoneNumber(QString::number(0))phoneNumber((const char*) 0) cả hai đều hoạt động?

Trả lời

36

Để tạo một null QString chỉ mặc định khởi tạo nó:

QString phoneNumber; 

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

phoneNumber = QString(); 

Lưu ý rằng QString::number(0) là decidedly không null - nó tạo ra một QString với giá trị "0".

Bạn cũng có thể khởi tạo QString với con trỏ NULL, nhưng tôi sẽ không khuyên bạn sử dụng trừ khi bạn đang chuyển con trỏ cho dù đó là NULL hay không (nghĩa là đôi khi có thể trỏ đến chuỗi C). không cần thiết.

Bạn cũng nên hiểu được following Qt docs:

Phân biệt giữa Null và Strings Rỗng

Vì lý do lịch sử, QString phân biệt giữa một chuỗi rỗng và một chuỗi rỗng. Chuỗi rỗng là một chuỗi được khởi tạo sử dụng hàm tạo mặc định của QString hoặc bằng cách chuyển (const char *)0 tới hàm tạo. Một chuỗi rỗng là bất kỳ chuỗi với kích thước 0. Một rỗng chuỗi luôn luôn là trống rỗng, nhưng một chuỗi rỗng không nhất thiết phải là 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 

Tất cả các chức năng trừ isNull() trị chuỗi rỗng giống như trống chuỗi. Ví dụ: toAscii().constData() trả về một con trỏ đến một ký tự '\0' cho một chuỗi rỗng (không phải là một con trỏ rỗng) và QString() so sánh bằng QString(""). Chúng tôi khuyên bạn luôn sử dụng chức năng isEmpty() và tránh isNull().

+0

Michael cảm ơn phản hồi của bạn, nhưng có một điều không rõ ràng với tôi - không str.clear() để trống chuỗi rỗng hoặc vô hiệu hóa. Nếu có sản phẩm nào có cách nào để vô hiệu hóa nó? – yatsa

+0

'QString :: clear()' đặt chuỗi thành null (tức là, sau 'str.clear()', str.isNull() sẽ trả về 'true'). –

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(); 
} 

Output:

true 
"" 

giải pháp Michael Burr`s là tất nhiên cũng đúng ... Nhưng tôi thích QString::null hơn.

+2

Thumbs up cho rõ ràng bao gồm QString :: null. Tôi thích cách nó loại bỏ bất kỳ/tất cả sự mơ hồ trong ý định. – rob

+1

@RobertOliveira Đồng ý! Không có ý tưởng về điều này cho đến bây giờ. – Andrew

Các vấn đề liên quan