c++ - 将 const char* 转换为 QString

标签 c++ qt qstring qtcore const-cast

我必须使用类型为 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 不正确的问题。

正如您自己指出的那样,您无法更改界面,但最好注意在理想世界中,您不会将 std 字符串与 QStrings 混合。您只需在代码中完全使用 QStrings。

即使您出于某种原因需要使用 std 或原始 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!
"

关于c++ - 将 const char* 转换为 QString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20824781/

相关文章:

c++ - 使用带有 QStringList 指针的运算符<<

c++ - 复制到 QMap 时出现 QString 错误。范围问题?

c++ - OpenCV:我是否超出了矩阵大小?

c++ - 如何修改 vector 成员的值?

c++ - 一次启用多个类的成员字段,具体取决于模板 <T>

c++ - QProcess 的最佳实现方式是什么,它读取 "real time"中的 stdout 和 stderr?

c++ - 实现自定义 QListWidgetItem?

c++ - 将 QList<customobj *> 暴露给 QML

c++ - 基本类型和用户定义类型的名称查找问题

c++ - 字符串列表和字符串