如何在`boost :: filesystem :: path`和`QString`之间转换?

时间:2018-12-12 13:36:19

标签: qt qstring boost-filesystem

使用boost::filesystem将Qt UI围绕在后端代码周围时,经常需要将boost::filesystem::path转换为QString,反之亦然。

进行这些转换的最佳方法是什么?

  1. 是跨平台的
  2. 毫不费力地保留编码
  3. 根据Qt的政策,在所有平台上产生包含常规斜杠的QString
  4. 高效并避免不必要的副本

1 个答案:

答案 0 :(得分:0)

这是我目前正在使用的,但是非常欢迎提出改进建议。

boost::filesystem::path PathFromQString(const QString & filePath)
{
#ifdef _WIN32
    auto * wptr = reinterpret_cast<const wchar_t*>(filePath.utf16());
    return boost::filesystem::path(wptr, wptr + filePath.size());
#else
    return boost::filesystem::path(filePath.toStdString());
#endif
}

QString QStringFromPath(const boost::filesystem::path & filePath)
{
#ifdef _WIN32
    return QString::fromStdWString(filePath.generic_wstring());
#else
    return QString::fromStdString(filePath.native());
#endif
}