我必须使用类型函数的输出,const char*
并且需要将其转换为QString
。
注意:在该函数内,这些是返回代码行的代码行 const char*
char* ClassA::getData() const{
return const_cast<char *> (_foo.c_str());
}
哪里_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());
下面的代码应该可以正常工作。您的问题很可能在其他地方。请进行干净的构建。
该错误将出现在您尚未与我们共享的更复杂的代码中的其他位置。您可能会遇到错误设置_foo的问题。
正如您自己指出的那样,您不能更改接口,但是最好注意一下,在理想情况下,您不要将std字符串与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;
}
TEMPLATE = app
TARGET = main
QT = core
SOURCES += main.cpp
TEST: "Hello World!
"
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句