Подтвердить что ты не робот

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

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

Каков наилучший способ подключения этих двух миров?

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

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

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

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

4b9b3361

Ответ 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