Mah*_*san 16 c++ qstring qt const-cast qtcore
我必须使用类型函数的输出,const char*我需要将其转换为QString.
注意:在该函数内部,这些是返回的代码行 const char*
char* ClassA::getData() const{
return const_cast<char *> (_foo.c_str());
}
Run Code Online (Sandbox Code Playgroud)
哪里_foo是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());
Run Code Online (Sandbox Code Playgroud)
下面的代码应该可以正常工作.您的问题最有可能发生在其他地方.请做一个干净的构建.
错误将出现在您未与我们共享的更复杂代码中的其他位置.您可能会因错误地设置_foo而遇到问题.
正如您自己所说,您无法更改界面,但最好注意在理想世界中,您不会将标准字符串与QStrings混合使用.您只需在代码中使用QStrings即可.
即使你出于某种原因需要使用std或raw char*类型,最好不要在代码中进行这样的const转换,因为QString将处理传递给它的const字符串.
#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;
}
Run Code Online (Sandbox Code Playgroud)
TEMPLATE = app
TARGET = main
QT = core
SOURCES += main.cpp
Run Code Online (Sandbox Code Playgroud)
TEST: "Hello World!
"
Run Code Online (Sandbox Code Playgroud)