繁体   English   中英

将const char *转换为QString

[英]Convert const char* to QString

我必须使用类型为const char*的函数的输出,我需要将其转换为QString

注意:在该函数内部,这些是返回const char*的代码行

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

其中_foostd::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());

下面的代码应该可以正常工作。 您的问题最有可能发生在其他地方。 请做一个干净的构建。

错误将出现在您未与我们共享的更复杂代码中的其他位置。 您可能会因错误地设置_foo而遇到问题。

正如您自己所说,您无法更改界面,但最好注意在理想世界中,您不会将标准字符串与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;
}

main.pro

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

产量

TEST: "Hello World!
"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM