Как конвертировать между `boost :: filesystem :: path` и` QString`? - PullRequest
0 голосов
/ 12 декабря 2018

Когда пользовательский интерфейс Qt оборачивается вокруг внутреннего кода с использованием boost::filesystem, часто требуется преобразовать boost::filesystem::path в QString и наоборот.

Каков наилучший способ сделать эти преобразования, которые:

  1. Является кроссплатформенным
  2. Без потерь сохраняет кодировку
  3. Создает QString с регулярными слешами на всех платформах, как и политика Qt.
  4. Эффективно и избегает ненужных копий

1 Ответ

0 голосов
/ 12 декабря 2018

Это то, что я сейчас использую, но предложения по улучшению очень приветствуются.

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
}
...