Преобразовать char const и* к в QString

Я должен использовать вывод функции типа const char* и мне нужно преобразовать его в QString.

Примечание: внутри этой функции это строки кода для возврата const char*

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

здесь _foo is std::string.

Я попытался использовать следующие строки кода, но всегда получаю пустую строку (на самом деле не пустую, но содержащую только новые символы строк и пренебрегаю всеми другими символами).

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

1 ответов


код ниже должен работать нормально. Ваша проблема, скорее всего, где-то в другом месте. Пожалуйста, сделайте чистую сборку.

ошибка будет где-то еще в более сложный код, что вы не поделились с нами. Вероятно, вы получаете проблемы с установкой _foo неправильно.

как вы сами отметили, Вы не можете изменить интерфейс, но лучше принять к сведению, что в идеальном мире вы бы не смешивали строки std с QStrings. Вы бы только использовать QStrings в вашем коде.

даже если вам по какой-то причине нужно использовать типы std или raw char*, лучше не делать такого const-приведения в коде, так как QString справится с переданными ему строками const.

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

главная.про

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

выход

TEST: "Hello World!
"