Question

Je travaille actuellement sur un projet plus important, où la "logique" est implémentée dans la norme C ++ avec toutes les cordes étant manipulées avec std::wstring et la partie UI est mise en œuvre à l'aide de QT et donc nécessairement nécessairement QString (Question Bonus: Est-ce vrai?).

Quelle est la meilleure façon de connecter ces deux mondes?

Je sais que je peux utiliser quelque chose comme

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

Mais je me demande s'il y a une solution plus agréable avec moins de frappe impliquée. Un opérateur défini par l'utilisateur est venu à mon esprit, mais je ne suis pas assez expérimenté pour m'attaquer seul.

Serait heureux que quelqu'un me pointe dans la bonne direction.

Était-ce utile?

La solution

C'est une bonne idée d'utiliser QString::fromStdWString mais (!!!) Si Qt a été compilé avec exactement les mêmes en-têtes STL que votre projet. Sinon, vous pouvez vous amuser beaucoup, attraper un bug.

Si vous ne savez pas que les deux en-têtes STL sont la même utilisation QString::fromWCharArray:

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

Mettre à jour: Répondre à @juzzlin:
Permet d'imaginer que qt était construit avec le stl contenant ce qui suit 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;
    ...
};

et vous avez le stl contenant ce qui suit std::wstring:

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

Si vous allez donner votre std::wstring à Qt, il interprétera m_the_end pointeur comme la longueur de la chaîne, et

Vous pouvez vous amuser beaucoup, attraper un bug

Autres conseils

Je pense que la conversion définie par l'utilisateur est ce que vous recherchez et de ce que je peux rassembler, il devrait ressembler à quelque chose comme ceci:

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

peut-être faire une fonction en ligne QString toQString(std::wstring string) Pour le faire "moins à taper" ...

Mais pour être honnête ... ce n'est pas le gros effort pour l'écrire de temps en temps;)

soo long zai

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top