Pregunta

Actualmente estoy trabajando en un proyecto más grande, donde la "lógica" se implementa en el estándar C ++ con todas las cuerdas que se manejan con std::wstring y la parte de la UI se implementa utilizando QT y, por lo tanto, necesariamente QString (Pregunta de bonificación: ¿Esto es cierto?).

¿Cuál es la mejor manera de conectar esos dos mundos?

Sé que puedo usar algo como

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

Pero me pregunto si hay una mejor manera con menos escritura involucrada. Un operador definido por el usuario vino a mi mente, pero no he experimentado lo suficiente como para abordar eso por mi cuenta.

Se alegraría si alguien pudiera apuntarme en la dirección correcta.

¿Fue útil?

Solución

Es una buena idea usar QString::fromStdWString pero (!!!) Si se compiló QT con exactamente los mismos encabezados STL que tu proyecto. Si no, puedes divertirte mucho, atrapando un error.

Si no está seguro de que ambos encabezados STL tengan el mismo uso QString::fromWCharArray:

std::wstring wideString;
QString qtString = QString::fromWCharArray( wideString.c_str() );

Actualizar: contestando a @juzzlin:
Vamos a imaginar que QT se construyó con el STL que contiene lo siguiente 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;
    ...
};

y usted tiene el STL que contiene lo siguiente std::wstring:

class wstring {
    wchar_t * m_ptr;
    wchar_t * m_the_end;
    ...
};

Si le das tu std::wstring a qt, interpretará m_the_end Puntero como la longitud de la cuerda, y

Puedes divertirte mucho, atrapando un error.

Otros consejos

Creo que una conversión definida por el usuario es lo que está buscando, y de lo que puedo reunir, debería verse algo así:

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

tal vez hacer una función en línea QString toQString(std::wstring string) Para hacerlo "menos de escribir" ...

Pero para ser honesto ... eso no es el gran esfuerzo para escribirlo de vez en cuando;)

Soo Long Zai

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top