【问题标题】:QString to std::string [duplicate]QString 到 std::string [重复]
【发布时间】:2023-12-11 16:07:01
【问题描述】:

我正在尝试该示例代码,但它在 visualc++ 2010 中崩溃了

QString fileName = "helloworld";
std::string str = fileName.toStdString();

【问题讨论】:

  • Visual Studio 知道 QString 是什么吗?我相信您需要将您的应用程序链接到一些 qt 库。
  • @izomorphius,我猜如果它编译然后 VS “知道” QString 是什么。
  • 您的 Qt 库是否可能针对与您的编译器安装使用的 std::string 不同的std::string 进行编译?例如,如果 Qt 库是针对 VC2008 编译的,则可能会导致您看到的崩溃。特别是 VC2010 的情况,其中 (IIRC) 标准库的重要部分已更改以更好地匹配 C++11。

标签: c++ qt visual-c++ qstring


【解决方案1】:

How to convert QString to std::string?

在将 QString 转换为 std::string 是 QString 是 UTF-16 编码的事实,而 std::string... 可能有任何编码。

QString qs;

// Either this if you use UTF-8 anywhere
std::string utf8_text = qs.toUtf8().constData();

// or this if you on Windows :-)
std::string current_locale_text = qs.toLocal8Bit().constData();

【讨论】:

  • .toStdString() 在内部调用 toAscii() 所以你不需要知道 qt 自己使用什么
  • @Martin Beckett - 谢谢,你是对的。另外:我忘了提到“QtTextCodec”类:doc.qt.nokia.com/4.6/qtextcodec.html
【解决方案2】:

std::string str(fileName.toStdString()); 如果您希望 str 包含 qstring 的副本

【讨论】: