Лучший способ конвертировать std:: wstring в QString
В настоящее время я работаю над более крупным проектом, где "логика" реализована в стандартном С++, когда все строки обрабатываются с помощью std::wstring
, а часть пользовательского интерфейса реализована с использованием Qt и, следовательно, обязательно QString
(Бонусный вопрос: Это правда?).
Каков наилучший способ подключения этих двух миров?
Я знаю, что могу использовать что-то вроде
std::wstring wideString;
QString qtString = QString::fromStdWString(wideString);
но мне интересно, есть ли более хороший способ с меньшим количеством ввода текста. Оператор, определенный пользователем, пришел мне на ум, но я недостаточно опыт, чтобы решить это самостоятельно.
Был бы рад, если бы кто-нибудь мог указать мне в правильном направлении.
Ответы
Ответ 1
Хорошая идея использовать QString::fromStdWString
, но (!!!), если Qt был скомпилирован с точно такими же заголовками STL, что и ваш проект. Если нет - вы можете получить массу удовольствия, поймав ошибку.
Если вы не уверены, что оба заголовка STL одинаковы, используйте QString::fromWCharArray
:
std::wstring wideString;
QString qtString = QString::fromWCharArray( wideString.c_str() );
Обновление: ответ на @juzzlin:
Предположим, что Qt был построен с STL, содержащим следующие std::wstring
:
class wstring { // I know, that there no such class, but I'm shure you'll understand what I want to say
wchar_t * m_ptr;
size_t m_length;
...
};
и у вас есть STL, содержащий следующие std::wstring
:
class wstring {
wchar_t * m_ptr;
wchar_t * m_the_end;
...
};
Если вы передадите свой std::wstring
в Qt, он будет интерпретировать указатель m_the_end
как длину строки, а
вы можете получить массу удовольствия, поймав ошибку
Ответ 2
Я думаю, что пользовательское преобразование - это то, что вы ищете, и из того, что я могу собрать, он должен выглядеть примерно так:
class foo
{
public:
operator QString(std::wstring& ws)
{
return QString::fromStdWString(ws);
}
}
Ответ 3
возможно сделать встроенную функцию QString toQString(std::wstring string)
, чтобы сделать ее "меньше"...
но, честно говоря... это не большое усилие, чтобы писать время от времени;)
soo long zai