Answers:
如果按字符串表示std::string
您可以使用以下方法进行操作:
QString QString :: fromStdString(const std :: string&str)
std::string str = "Hello world";
QString qstr = QString::fromStdString(str);
如果按字符串表示const char *
您使用Ascii编码,则可以使用以下方法:
QString QString :: fromAscii(const char * str,int size = -1)
const char* str = "Hello world";
QString qstr = QString::fromAscii(str);
如果您const char *
使用可以通过QTextCodec :: codecForLocale()读取的系统编码进行编码,则应使用以下方法:
QString QString :: fromLocal8Bit(const char * str,int size = -1)
const char* str = "zażółć gęślą jaźń"; // latin2 source file and system encoding
QString qstr = QString::fromLocal8Bit(str);
如果您使用const char *
UTF8编码,则需要使用以下方法:
QString QString :: fromUtf8(const char * str,int size = -1)
const char* str = read_raw("hello.txt"); // assuming hello.txt is UTF8 encoded, and read_raw() reads bytes from file into memory and returns pointer to the first byte as const char*
QString qstr = QString::fromUtf8(str);
还有一种const ushort *
包含UTF16编码的字符串的方法:
QString QString :: fromUtf16(const ushort * unicode,int size = -1)
const ushort* str = read_raw("hello.txt"); // assuming hello.txt is UTF16 encoded, and read_raw() reads bytes from file into memory and returns pointer to the first byte as const ushort*
QString qstr = QString::fromUtf16(str);
如果使用STL兼容性进行编译,请QString
使用静态方法将转换std::string
为QString
:
std::string str = "abc";
QString qstr = QString::fromStdString(str);
QString qstr = QString(str.c_str());
吗?不确定是否QString
复制传递给它的内容。
fromStdString
将保留这些内容,从.c_str
不会进行构建。(而正是通过这种方法使我提出了这个问题。)
替代方式:
std::string s = "This is an STL string";
QString qs = QString::fromAscii(s.data(), s.size());
这样的好处是,如果没有地方在末尾添加,则不使用.c_str()
可能导致std::string
自身复制'\0'
。
.c_str()
)
我遇到了这个问题,因为在遵循答案时遇到了问题,因此我在此处发布了解决方案。
上面的示例全部显示了仅包含ASCII值的字符串的示例,在这种情况下,一切正常。但是,当在Windows中处理字符串时,如果还可以包含其他字符(如德语变音符),则这些解决方案将不起作用
在这种情况下,给出正确结果的唯一代码是
std::string s = "Übernahme";
QString q = QString::fromLocal8Bit(s.c_str());
如果您不必处理此类字符串,则以上答案将可以正常工作。
fromLocal8Bit()
此外,要转换任何内容,可以使用QVariant类。
例如:
std::string str("hello !");
qDebug() << QVariant(str.c_str()).toString();
int test = 10;
double titi = 5.42;
qDebug() << QVariant(test).toString();
qDebug() << QVariant(titi).toString();
qDebug() << QVariant(titi).toInt();
输出
"hello !"
"10"
"5.42"
5
您是指字符串中的C字符串char*
,还是C ++ std::string
对象?
无论哪种方式,您都可以使用QT参考资料中所述的相同构造函数:
对于常规的C字符串,只需使用main构造函数即可:
char name[] = "Stack Overflow";
QString qname(name);
对于a std::string
,您将获得到char*
缓冲区,并将其传递给QString
构造函数:
std::string name2("Stack Overflow");
QString qname2(name2.c_str());
QByteArray::QByteArray (const char* data, int size)
先包装缓冲区,然后再将其传递给QString
构造函数。