20 votes

comment initialiser un QString à null ?

Quelle est la différence entre QString::number(0) y ((const char*) 0) ?

Je veux initialiser un QString dites phoneNumber a null . Will phoneNumber(QString::number(0)) y phoneNumber((const char*) 0) les deux fonctionnent ?

48voto

Michael Burr Points 181287

Pour créer une valeur nulle QString juste l'initialiser par défaut :

QString phoneNumber;

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

phoneNumber = QString();

Notez que QString::number(0) est décidément pas null - il crée un QString avec la valeur "0" .

Vous pouvez également initialiser le QString avec un NULL mais je ne le recommanderais pas à moins que vous ne passiez un pointeur indépendamment du fait qu'il s'agisse de NULL ou non (c'est-à-dire qu'il pourrait parfois pointer vers une chaîne de caractères C) puisque c'est inutile.

Vous devez également comprendre le en suivant les documents de Qt :

Distinction entre les chaînes de caractères nulles et vides

Pour des raisons historiques, QString fait la distinction entre une chaîne nulle et une chaîne vide. Une chaîne nulle est une chaîne qui est initialisée en utilisant QString par défaut ou en passant (const char *)0 au constructeur. Une chaîne vide est une chaîne de taille 0. Une chaîne nulle est toujours vide, mais une chaîne vide n'est pas nécessairement nulle :

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

Toutes les fonctions sauf isNull() traitent les chaînes nulles de la même manière que les vides. Par exemple, toAscii().constData() renvoie un pointeur vers un '\0' pour une chaîne de caractères nulle (et non un pointeur nul), et QString() est égal à QString("") . Nous vous recommandons de toujours utiliser le isEmpty() et éviter isNull() .

15voto

immerhart Points 751
#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();
}

Sortie :

true
""

La solution de Michael Burr est bien sûr aussi correcte... Mais j'aime bien la QString::null plus.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X