Le meilleur moyen de convertir des std::wstring à QString
Je suis actuellement en train de travailler sur un projet plus vaste, où la "logique" est mis en œuvre dans la norme C++ avec toutes les chaînes traitées avec std::wstring
et la partie de l'INTERFACE utilisateur est mis en œuvre à l'aide de Qt et donc nécessairement QString
(question Bonus: est-ce vrai?).
Quelle est la meilleure façon de relier ces deux mondes?
Je sais que je peux utiliser quelque chose comme
std::wstring wideString;
QString qtString = QString::fromStdWString(wideString);
mais je me demandais si il n'y est plus agréable avec moins de frappe impliqués. Un utilisateur défini par l'opérateur est venu à mon esprit, mais je ne suis pas assez expérimenté pour s'attaquer que sur mon propre.
Serais heureux si quelqu'un pouvait me diriger dans la bonne direction.
Vous avez accepté la réponse qui décrit uniquement la conversion dans un sens. C'était votre question? Alors vous devriez probablement de modifier le titre afin qu'il ne soit pas trompeuse (pour ceux en espérant trouver une réponse au sujet de la conversion dans l'autre sens).
OriginalL'auteur mort | 2013-02-06
Vous devez vous connecter pour publier un commentaire.
C'est une bonne idée d'utiliser
QString::fromStdWString
mais (!!!) si l'intervalle Qt a été compilé avec exactement le même STL-têtes de votre projet. Si non, vous pouvez obtenir beaucoup de plaisir, la capture d'un bug.Si vous ne le faites pas en sorte que les deux STL-têtes sont la même utilisation
QString::fromWCharArray
:Mise à jour: répondre à @juzzlin:
Permet d'imaginer que Qt a été construit avec la STL contenant les éléments suivants
std::wstring
:et vous avez la STL contenant les éléments suivants
std::wstring
:Si vous allez donner votre
std::wstring
de Qt, il va interpréterm_the_end
pointeur de la longueur de la chaîne, etfromStdWString est incorporé dans qstring.h et a la mise en œuvre:
return fromWCharArray(s.data(), int(s.size()));
Donc, il est sûr à utiliser.Oui, vous avez raison, mais il n'y a aucune garantie que
wstring::data
etwstring::size
sont intégrées en trop.il n'a pas d'importance, car ils sont compilées à partir de l'en-tête (du code). Vous pouvez écrire vous-même
fromWCharArray(s.data(), int(s.size()));
au lieu de l'appelerfromStdWString
et le résultat serait le même.OriginalL'auteur borisbn
Je pense que définis par l'utilisateur de conversion est ce que vous cherchez, et de ce que j'ai pu rassembler, il devrait ressembler à quelque chose comme ceci:
OriginalL'auteur Tony The Lion
peut-être faire une fonction inline
QString toQString(std::wstring string)
pour le rendre "moins de type' ...mais pour être honnête ... c'est pas le grand effort de l'écrire de temps en temps 😉
soo long zai
OriginalL'auteur Zaiborg