web-dev-qa-db-fra.com

Convertir const char * en QString

Je dois utiliser la sortie d'une fonction d'un type const char* et je dois le convertir en QString.

Remarque: à l'intérieur de cette fonction, ce sont des lignes de code pour renvoyer le const char*

char* ClassA::getData() const{
    return const_cast<char *> (_foo.c_str());
}

_foo est std::string.

J'ai essayé d'utiliser les lignes de code suivantes, mais j'ai toujours une chaîne vide (en fait pas vide mais ne contenant que les nouvelles lignes et en négligeant tous les autres caractères).

QString foo1 = QString(temp.getData());
QString foo2 = QString::fromLocal8Bit(temp.getData());
QString foo3 = QString(QLatin1String(temp.getData()));
QString foo4 = QString::fromAscii(temp.getData());
QString foo5 = QString::fromUtf8(temp.getData());
16
Mahmoud Hassan

Le code ci-dessous devrait fonctionner correctement. Votre problème est très probablement ailleurs. Veuillez faire une construction propre.

L'erreur sera ailleurs dans votre code plus complexe que vous n'avez pas partagé avec nous. Vous rencontrez probablement des problèmes avec la configuration incorrecte de _foo.

Comme vous l'avez remarqué vous-même, vous ne pouvez pas changer l'interface, mais il est préférable de noter que dans un monde idéal, vous ne mélangeriez pas les chaînes std avec QStrings. Vous utiliseriez simplement QStrings dans votre code.

Même si vous devez utiliser des types std ou char * bruts pour une raison quelconque, il est préférable de ne pas effectuer une telle conversion const dans le code car QString gèrera les chaînes const qui lui sont transmises.

main.cpp

#include <QString>
#include <QDebug>

class ClassA
{
    public:
        ClassA() { _foo = "Hello World!\n"; }
        ~ClassA() {}

        char* getData() const {
            return const_cast<char *> (_foo.c_str());
        }

    private:
        std::string _foo;
};

int main()
{
    ClassA temp;
    QString myString = QString::fromUtf8(temp.getData());
    qDebug() << "TEST:" << myString;
    return 0;
}

main.pro

TEMPLATE = app
TARGET = main
QT = core
SOURCES += main.cpp

Production

TEST: "Hello World!
"
7
lpapp