Domanda

Attualmente sto lavorando su un progetto più ampio, dove la "logica" è implementata in standard C ++ con tutte le corde con std::wstring e la parte dell'interfaccia utente è implementata usando qt e quindi necessariamente QString (Domanda bonus: è vero?).

Qual è il modo migliore per collegare questi due mondi?

So che posso usare qualcosa del genere

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

Ma mi chiedo se c'è un modo più bello con meno digitando. Un operatore definito dall'utente mi è venuto in mente, ma non sono abbastanza esperto da affrontarlo da solo.

Sarebbe contento se qualcuno potesse indicarmi nella giusta direzione.

È stato utile?

Soluzione

È una buona idea usare QString::fromStdWString ma (!!!) Se Qt è stato compilato con esattamente le stesse intestazioni STL del tuo progetto. In caso contrario, puoi divertirti molto, catturando un bug.

Se non sei sicuro che sia le intestazioni STL siano lo stesso utilizzo QString::fromWCharArray:

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

Aggiornare: Risposta a @juzzlin:
Immaginiamo che Qt sia stato costruito con lo stl contenente quanto segue 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;
    ...
};

E tu hai lo stl contenente quanto segue std::wstring:

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

Se darà il tuo std::wstring a qt, interpreterà m_the_end puntatore come la lunghezza della stringa, e

Puoi divertirti molto, catturando un bug

Altri suggerimenti

Penso che una conversione definita dall'utente sia ciò che stai cercando, e da quello che posso raccogliere, dovrebbe essere simile a questo:

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

forse fare una funzione in linea QString toQString(std::wstring string) per renderlo 'meno da digitare' ...

Ma ad essere onesto ... non è affatto il grande sforzo per scriverlo di volta in volta;)

Soo Long Zai.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top