2012-11-08 31 views
6

Tôi chỉ tò mò thôi. Ví dụ: tôi cần xuất một số trong bảng điều khiển.Qt: Cách nào tốt hơn để chuyển một số thành QString, QVariant hoặc QString :: number

Mã này sẽ là:

#include <QDebug> 
#include <QVariant> 
#include <QString> 

void displayNumber(quint8 number) { 
    qDebug() << QVariant(number).toString(); 
    qDebug() << QString::number(number); 
//or for example 
// QLabel label; 
// label.setText(QString::number(number)); 
//or 
// label.setText(QVariant(number).toString()); 
} 

Đó sẽ là hiệu suất tốt hơn khôn ngoan? Tôi nghĩ tiêu thụ bộ nhớ cũng khác nhau. QVariant (số) .toString() có nghĩa là nó lưu trữ một QVariant trong ngăn xếp. Không chắc chắn về QString :: number(), không nên nó chỉ gọi hàm (chắc chắn, hàm có trả về QString do đó nó được cấp phát trên stack và lấy không gian đó và các hoạt động đó để cấp phát và không phân bổ nó)? Dù sao, sizeof() cho tôi 16 Bytes cho QVariant và 4 Bytes cho QString.

Trả lời

4

Tất nhiên biến thể thứ hai tốt hơn.

QString::number() là hàm tĩnh trả về chuỗi mong muốn. Khi bạn sử dụng QVariant(number).toString();, trước tiên bạn tạo một QVariant và chuyển đổi nó thành một chuỗi mong muốn, do đó, bạn tạo biến số bổ sung và không cần thiết của loại QVariant.

Ngoài ra, bạn không cần phải chuyển số thành chuỗi để xuất nó bằng qDebug. qDebug() << 42; hoạt động tốt.

+0

Đó cũng là những gì tôi đã suy nghĩ. Nó phân bổ QVariant và sau khi gọi .toString() nó cũng phân bổ một QString và trả về QString. –

+0

@Moraru, vâng, chính xác;) – SingerOfTheFall

1

Tại sao không chỉ đơn giản là

qDebug << number 

? Nếu trong trường hợp của một quint8 nó ra nhân vật thay vì số lượng bản thân, sau đó chỉ cần đúc -

qDebug << static_cast<int>(number); 

hoặc (cái này là một chút khó khăn để hiểu, nhìn lên chương trình khuyến mãi không thể thiếu)

qDebug << +number; 

tôi cá cược rằng tùy chọn này sẽ tốt hơn (hiệu suất khôn ngoan) so với một trong các đề xuất của bạn.

+0

qDebug() là một ví dụ. Hãy nói nhãn QLabel; label.setText (QString :: number (number)); –

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