_T() Makro für QStrings in Qt nötig? (MFC Portierung nach Qt)



  • Hallo,

    ich portiere gerade mein MFC Programm nach Qt. Im dem MFC Programmcode werden CStrings immer mit dem Makro _T() zugewiesen:

    CString str;
    str = _T("Hallo");
    

    Qt kennt jedoch anscheinend das _T() Makro nicht und gibt beim Kompilieren die Fehlermeldung aus: "_T": Bezeichner wurde nicht gefunden.

    Dazu zwei Fragen:
    1. Ist das _T() Makro auch in Qt für QStrings nötig?
    2. Falls ja, muss für das _T() Makro eine spezielle Qt Header-Datei eingebunden werden? Falls ja welche?

    Grüße,
    Bernd



  • _T(x) ermöglicht es bei MFC ohne Änderung als Unicode oder Ansi zu kompilieren.
    Bei Unicode setzt das _T(x)-Makro ein L vor die Zeichenkette, also L"Mein Text". Das will der Kompiler so (wchar_t*), bei Ansi darf da kein L stehen (char*). Das _T-Makro macht das halt automatisch.

    Bei Qt wird ein String im Quelltext als Unicode angenommen. Es gibt bei Qt aber noch ein tr("Test") das kennzeichnet, das der Text in eine andere Sprache übersetzt werden soll wenn man ein mehrsprachiges Programm entwickelt.

    so ist das Makro definiert

    #if defined(_UNICODE)
    #define _T(x) L ##x
    #else
    #define _T(x) x
    #endif
    

    um deinen Code nicht ändern zu müssen definierst du einfach

    #define _T(x) x
    


  • um deinen Code nicht ändern zu müssen definierst du einfach
    C++:
    #define _T(x) x

    Verstehe ich es richtig, das im Qt Code das _T() Makro nicht benötigt wird und es deshalb einfach weggelassen werden kann:

    QString str;
    str = "Hallo";
    


  • Bei Qt wird _T() nicht verwendet, also weglassen.



  • Danke!


Anmelden zum Antworten