我从事为MSVCC / Windows编写的项目,我必须移植到GCC / Linux。 Project有自己的String Class,它将数据存储在Qt的QString中。对于转换为wchar_t *,最初有这种方法(对于Windows):
const wchar_t* String::c_str() const
{
if (length() > 0)
{
return (const wchar_t*)QString::unicode();
}
else
{
return &s_nullString;
}
}
因为unicode()返回一个QChar(16位长),这在Windows下运行,因为wchar_t在那里是16位,但现在GCC wchar_t是32位长,因此不再起作用。我试图用这个来解决这个问题:
const wchar_t* String::c_str() const
{
if ( isEmpty() )
{
return &s_nullString;
}
else
{
return toStdWString().c_str();
}
}
这个问题是,当这个函数返回时,该对象不再存在,所以这不起作用。 我认为解决这个问题的唯一方法是:
可能性对我来说意味着几个小时不必要的工作,我不知道可能性是否可能。我的问题是,如何最好地解决这个问题? 我很感激任何有用的建议。谢谢。
答案 0 :(得分:0)
在我看来,有两种方式:
这两个函数可以将QString转换为std :: string和std :: wstring
QString::toStdWString
QString::toStdString
将QString构建为ucs4:
#define QT_QSTRING_UCS_4
#include "qstring.h"
这可以在qt3(qstring.h)中使用。我找不到qt4的来源。