Да, у меня была такая ситуация раньше.Программа, над которой я работал, везде использовала Qt, но мне пришлось подключить ее к библиотеке, которая ожидала std::string
.Преимущество QString
заключается в том, что он явно использует Unicode, в то время как стандартная библиотека C ++ не дает никаких гарантий относительно кодировки.
Решением было преобразование на границе этой библиотеки с помощью
QString toQString(std::string const &s)
{
return QString::fromUtf8(s.c_str());
}
std::string fromQString(QString const &s)
{
return std::string(s.toUtf8().data());
}
поскольку библиотека произвела std::string
, содержащие UTF-8.
То, что вам нужно, это полная противоположность: используйте std::string
повсюду и конвертируйте на границе Qt.Это выглядит совершенно нормально;это требует немного больше работы, чем всегда, с использованием QString
, но вам все равно придется приложить усилия, когда вам нужна библиотека, не поддерживающая QString
, и ваши компоненты, не относящиеся к GUI, не зависят от Qt (ура!).