如何将字符串转换为 QString?

最基本的方法是什么?

281470 次浏览

如果你说的字符串是指 std::string,那么你可以用这个方法:

QString QString: : from StdString (const std: : string & str)

std::string str = "Hello world";
QString qstr = QString::fromStdString(str);

如果你说的字符串是指 Ascii 编码的 const char *,那么你可以使用这种方法:

QString QString: : from Ascii (const char * str,int size = -1)

const char* str = "Hello world";
QString qstr = QString::fromAscii(str);

如果你有 const char *编码的系统编码,可以与 : codecForLocale ()一起读取,那么你应该使用这种方法:

QString QString: : from Local8bit (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: : from Utf8(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);

还有包含 UTF16编码字符串的 const ushort *方法:

QString QString: : from Utf16(const usshort * 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);
std::string s = "Sambuca";
QString q = s.c_str();

警告: 如果 std::string包含 \0,这将不起作用。

你指的是 C 字符串,比如 char*字符串,还是 C + + std::string对象?

无论哪种方式,您都使用相同的构造函数,正如 QT 参考文献中记录的那样:

对于普通的 C 字符串,只需使用 main 构造函数:

char name[] = "Stack Overflow";
QString qname(name);

对于 std::string,获取 char*到缓冲区并将其传递给 QString构造函数:

std::string name2("Stack Overflow");
QString qname2(name2.c_str());

如果使用 STL 兼容性编译,QString有一个 静态法来将 std::string转换为 QString:

std::string str = "abc";
QString qstr = QString::fromStdString(str);

替代方法:

std::string s = "This is an STL string";
QString qs = QString::fromAscii(s.data(), s.size());

这样做的好处是不使用 .c_str(),这可能会导致 std::string复制自己,以防在末尾没有地方添加 '\0'

我遇到这个问题是因为我在追踪答案时遇到了问题,所以我把我的解决方案贴在这里。

上面的示例都显示了只包含 ASCII 值的字符串的示例,在这种情况下一切都正常。然而,当在 Windows 中处理字符串时,它也可以包含其他字符,比如德语元音变音符,那么这些解决方案不起作用吗

在这种情况下给出正确结果的唯一代码是

std::string s = "Übernahme";
QString q = QString::fromLocal8Bit(s.c_str());

如果您不需要处理这些字符串,那么以上的答案将很好地工作。

此外,要转换任何您想要的东西,您可以使用 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