Лучший способ конвертировать std :: wstring в QString

В настоящее время я работаю над большим проектом, где «логика» реализована в стандарте C ++ со всеми строками, обрабатываемыми с std::wstring и часть пользовательского интерфейса реализована с использованием Qt и, следовательно, обязательно QString (Бонусный вопрос: это правда?).

Как лучше всего соединить эти два мира?

Я знаю, что могу использовать что-то вроде

std::wstring wideString;
QString qtString = QString::fromStdWString(wideString);

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

Был бы рад, если бы кто-нибудь мог указать мне правильное направление.

14

Решение

Это хорошая идея для использования 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's 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 указатель как длина строки, и

Вы можете получить массу удовольствия, поймав ошибку

17

Другие решения

Я думаю, что пользовательское преобразование — это то, что вы ищете, и из того, что я могу собрать, оно должно выглядеть примерно так:

class foo
{
public:
operator QString(std::wstring& ws)
{
return QString::fromStdWString(ws);
}
}
2

возможно сделать встроенную функцию QString toQString(std::wstring string) чтобы было меньше печатать …

но, честно говоря … это совсем не большое усилие, чтобы время от времени писать это;)

так долго, зай

0
По вопросам рекламы [email protected]