2012-03-15 20 views
13

¿Cuál es la diferencia entre QString::number(0) y ((const char*) 0)?cómo inicializar un QString a nulo?

Quiero inicializar un QString decir phoneNumber a null. ¿Funcionarán phoneNumber(QString::number(0)) y phoneNumber((const char*) 0)?

Respuesta

36

Para crear un nulo QString simplemente por defecto inicializa:

QString phoneNumber; 

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

phoneNumber = QString(); 

Tenga en cuenta que es decididamente QString::number(0) no nula - se crea un QString con el valor "0".

También puede inicializar el QString con un puntero NULL, pero yo no lo recomendaría a menos que estés pasando un puntero independientemente de si se trata de NULL o no (es decir, que a veces podía apuntar a una cadena C), ya que es innecesario.

También debe comprender el following Qt docs:

Distinción entre nulo y cadenas vacías

Por razones históricas, QString distingue entre una cadena nula y una cadena vacía. Una cadena nula es una cadena que se inicializa usando el constructor predeterminado de QString o pasando (const char *)0 al constructor. Una cadena vacía es cualquier cadena con tamaño 0. Un cadena nula siempre está vacío, pero una cadena vacía no es necesariamente nulo:

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 

todas las funciones excepto isNull() tratar las series nulos los mismos que vacías cuerdas. Por ejemplo, toAscii().constData() devuelve un puntero a un '\0' carácter para una cadena nula (no un puntero nulo), y QString() compara igual a QString(""). Recomendamos que utilice siempre la función isEmpty() y evite isNull().

+0

Michael gracias por su respuesta, pero una cosa no me queda clara: ¿str.clear() deja una cadena vacía o anula una. Si está vacío, ¿hay alguna forma de anularlo? – yatsa

+0

'QString :: clear()' establece la cadena en nulo (es decir, después de 'str.clear()', str.isNull() devolverá '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(); 
} 

Salida:

true 
"" 

solución Michael Burr`s es, por supuesto, también es correcto ... pero me gusta la QString::null más.

+2

Pulgares arriba para incluir explícitamente QString :: null. Me gusta la forma en que elimina cualquier ambigüedad en la intención. – rob

+1

@RobertOliveira ¡De acuerdo! No tenía idea de esto hasta ahora. – Andrew