Qt Forum

    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Unsolved

    QT and Unicode

    General and Desktop
    3
    6
    7275
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • P
      pixbyte last edited by

      Hello,
      I'am new to QT and I try to understand some differences between QT and old VS projects. One issue I have currently is to understand QT and its codepage. As I understand, QT is Unicode enabled. Because Iam using the VStudio 2008 compiler I assume it will be compatible with Unicode librarys from other companies. But it seems that this is wrong. I have a DLL that is compiled in unicode with VisualStudio. I can use this DLL very easy in a VisualStudio project. But If I link the DLL with a QT project I cannot use the DLL well.

      As sample:
      @ TCHAR chLicenseKey[35] = _T("KLJWVC-IXPJAP-35LAUI-AZ0G5A-2LB5KU");
      int32 res = ::Initialize(chLicenseKey, BS_ASPI_INTERNAL, BS_TRUE);@

      I tried to use this in QT but the DLL reports always an error. Because it reports a error code from the DLL header I assume that it is linked well. So I think it is a problem with the key and the string.

      So my question: Do QT use a special Unicode string that is not working with common Unicode DLLs from VisualStudio? Maybe a different UTF set? My QT source is saved in UTF-8 in case of multilanguage.
      Can I use DLLs with Unicode codepage from VisualStudio projects in QT or do I need to use Multibyte DLLs?
      Please give me some hints to solve this problem.

      Ingo

      1 Reply Last reply Reply Quote 0
      • SGaist
        SGaist Lifetime Qt Champion last edited by

        Hi,

        Check that you wchar_t settings are the same between Qt and VS. IIRC the default for Qt build is "not" built-in type.

        On a side note it's Qt, QT is for Apple's QuickTime.

        Hope it helps

        Interested in AI ? www.idiap.ch
        Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

        1 Reply Last reply Reply Quote 0
        • P
          pixbyte last edited by

          Hi,
          ok, sorry for the Qt issue ;)

          So if the DLL is compiled with wchar_t as build in then it do not work with Qt?

          Ingo

          1 Reply Last reply Reply Quote 0
          • M
            MuldeR last edited by

            Qt's QString internally uses UTF-16, which is the same as the 'wchar_t' type does on the Windows platform (e.g. Visual Studio). If you want to get a QString as a "native" wchar_t (UTF-16) string, you can simply use QString::utf16(). The other way around, a new QString can be constructed from a a "native" wchar_t (UTF-16) string via QString::fromUtf16().

            However be aware that Qt's functions use the "const ushort *" type, instead of "const wchar_t *" type, so you may need a typcast. This typecast is safe, because both are 16-Bit types.

            @const wchar_t test = L"Test String";
            QString myString = QString::fromUtf6((const ushort
            ) test);
            const wchar_t out = (const wchar_t) myString::utf16();@

            My OpenSource software at: http://muldersoft.com/

            Qt v4.8.6 MSVC 2013, static/shared: http://goo.gl/BXqhrS

            Go visit the coop: http://youtu.be/Jay...

            1 Reply Last reply Reply Quote 0
            • P
              pixbyte last edited by

              Hi,
              ok, sounds all well but I stil ldo not understand all the issues. Example. As I wrote I have the code:
              @ TCHAR chLicenseKey[35] = _T("KLJWVC-IXPJAP-35LAUI-AZ0G5A-2LB5KU");
              int32 res = ::Initialize(chLicenseKey, BS_ASPI_INTERNAL, BS_TRUE);
              @
              so we have ::Initialize(TCHAR[35], int ,BOOL);
              Means the first string is a TCHAR[35] string. If I use a QString and cast it ot const wchar_t* I only get a compile error: cannot convert parameter 1 from 'const wchar_t *' to 'const TCHAR []'

              So it is still not the solution.

              Ingo

              1 Reply Last reply Reply Quote 0
              • M
                MuldeR last edited by

                TCHAR is not a specific type. TCHAR is a macro, defined in <tchar.h>. It is part of Microsoft's way to support building the same code with Unicode (UTF-16) strings or with ANSI strings.

                Depending on your project configuration, TCHAR will either expand to "wchar_t" (Unicode) or to "char" (ANSI). Probably the function you are calling expects the type "wchar_t", but your project configuration is set to ANSI, i.e. TCHAR will expand to "char". The same way the _T() macro will either expand to an L-prefix (and thus create a Unicode string literal) or just do nothing at all (and thus create an ANSI string literal).

                If you explicitly want to use "wchar_t" (or "char"), then you should be using those directly rather than using the TCHAR macro. Using TCHAR is a good idea, only if you want to use the T-foobar macros all the way...

                (BTW: All those considerations are not Qt-specific or Qt-related at all)

                --

                See also:

                • http://msdn.microsoft.com/en-us/library/se784sk6.aspx
                • http://msdn.microsoft.com/en-us/library/tsbaswba.aspx

                My OpenSource software at: http://muldersoft.com/

                Qt v4.8.6 MSVC 2013, static/shared: http://goo.gl/BXqhrS

                Go visit the coop: http://youtu.be/Jay...

                1 Reply Last reply Reply Quote 0
                • First post
                  Last post