Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. How to convert QString to const char *
Forum Updated to NodeBB v4.3 + New Features

How to convert QString to const char *

Scheduled Pinned Locked Moved General and Desktop
18 Posts 12 Posters 161.4k Views 1 Watching
  • 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.
  • A Offline
    A Offline
    acropole
    wrote on last edited by
    #1

    Hi,

    Is there any way to convert a QString to a const char * ?

    Thanks.

    1 Reply Last reply
    1
    • T Offline
      T Offline
      Thanatos.jsse
      wrote on last edited by
      #2

      You can do this:
      @QString myString = "BlaBla"
      char* myChar = myString.toStdString().c_str();@

      Look this link "C++":http://www.cplusplus.com/reference/string/string/c_str/.

      BR.

      1 Reply Last reply
      0
      • D Offline
        D Offline
        dangelog
        wrote on last edited by
        #3

        http://lmgtfy.com/?q=convert+qstring+to+const+char+*

        Software Engineer
        KDAB (UK) Ltd., a KDAB Group company

        M 1 Reply Last reply
        0
        • G Offline
          G Offline
          giesbert
          wrote on last edited by
          #4

          [quote author="Thanatos.jsse" date="1301106274"]You can do this:
          @QString myString = "BlaBla"
          char* myChar = myString.toStdString().c_str();@
          [/quote]

          Take care of the lifetime of these variables!
          if you have an in parameter, you can do such things, although I would not got the way with std::string:

          @
          void foo(const char*);

          QSTring text;
          foo(text.toUtf8().constData());
          

          @

          aditionally, check:

          • QByteArray toAscii () const
          • QByteArray toLatin1 () const
          • QByteArray toLocal8Bit () const

          It's up to you, which encoding you use.
          But all these functions return temporary objects, and calling constData returns the buffer of the temp objects. In the next line of code (when foo() returns) the temp object is destroyed and the buffer gets invalid!

          Nokia Certified Qt Specialist.
          Programming Is Like Sex: One mistake and you have to support it for the rest of your life. (Michael Sinz)

          1 Reply Last reply
          2
          • A Offline
            A Offline
            acropole
            wrote on last edited by
            #5

            So there is no way...

            Luckily there is good old std c++ :
            string appName = m_sAppName.toStdString();

            1 Reply Last reply
            0
            • G Offline
              G Offline
              giesbert
              wrote on last edited by
              #6

              Why should the be no way? I showed you some...

              it is, but which format do you need?

              • utf8?
              • 7-bit ASCII?
              • 8-bit ASCI with with regional code?
              • MBCS?

              all are const char* formats.
              QString is unicode.

              in general, it is possible:

              @
              QString text;
              std::string s = text.toLatin1().constData;
              foo(s.c_str());
              @

              If you really need a const char* I would convert it to and std::string (but reagrd the conversion!) and use the std::string. Who shall otherwise handle the memory? who shall allocate it? who shall free it?

              you can also do the following:

              @
              QString text;

              chat* p = new char[text.length() + 1);
              strcpy(p, text.toLatin1().constData());
              

              @

              Take care that text.length() might not valid if you then convert to utf8!

              Nokia Certified Qt Specialist.
              Programming Is Like Sex: One mistake and you have to support it for the rest of your life. (Michael Sinz)

              1 Reply Last reply
              1
              • A Offline
                A Offline
                acropole
                wrote on last edited by
                #7

                I said there is no way because you said the const char * is lost immediatly at the next line of code.
                But I found a way using usual c++, as edited in my previous post.

                1 Reply Last reply
                0
                • G Offline
                  G Offline
                  giesbert
                  wrote on last edited by
                  #8

                  if you use toStdString, take care of the encoding.
                  QString is unicode. So That is why I've written the stuff of the encoding.

                  Nokia Certified Qt Specialist.
                  Programming Is Like Sex: One mistake and you have to support it for the rest of your life. (Michael Sinz)

                  1 Reply Last reply
                  0
                  • T Offline
                    T Offline
                    Thanatos.jsse
                    wrote on last edited by
                    #9

                    [quote author="Gerolf" date="1301125342"]
                    Take care of the lifetime of these variables![/quote]

                    Ok Gerolf, I'll take care in the following contributions.

                    Thanks.

                    1 Reply Last reply
                    1
                    • S Offline
                      S Offline
                      shiroki
                      wrote on last edited by
                      #10

                      check this http://developer.qt.nokia.com/faq/answer/how_can_i_convert_a_qstring_to_char_and_vice_versa

                      blog: http://www.cuteqt.com/blog
                      bbs: http://www.cuteqt.com/bbs

                      1 Reply Last reply
                      0
                      • S Offline
                        S Offline
                        sumeetrt
                        wrote on last edited by
                        #11

                        thank you sir it was helpful

                        1 Reply Last reply
                        0
                        • S Offline
                          S Offline
                          sumeetrt
                          wrote on last edited by
                          #12

                          i want to type cast QByteArray to a QString
                          @
                          QByteArray myAppString[4096] ;
                          QString myString ;
                          @
                          now i have some data in myAppstring now i want it to convert in QString
                          so i have QString Constructor no 9 - which take const ByteArray
                          but it is now working
                          @
                          QString *str1 = new QString(myAppString) ;
                          @
                          it give me error

                          is there any way to do conversion of Qbytearray to QString

                          1 Reply Last reply
                          0
                          • A Offline
                            A Offline
                            andre
                            wrote on last edited by
                            #13

                            A QByteArray is not much more than a nice wrapper around a char*, so the same rules apply.

                            If you say that you get an error and you want help on that error, it is best to actually mention said error.

                            1 Reply Last reply
                            0
                            • U Offline
                              U Offline
                              uranusjr
                              wrote on last edited by
                              #14

                              QString Constructor No 9 (which takes a QByteArray) uses UTF-8, so you need to ensure that your byte array uses that encoding. It is better to use QString's static methods fromLatin1, fromLocal8Bit and fromUtf8 IMO because they are more explicit.

                              You can check "the documentation":http://qt-project.org/doc/qt-5.0/qtcore/qstring.html for more detailed explanation.

                              And I'd also like to recommend some "good reading on character encoding":http://www.joelonsoftware.com/articles/Unicode.html if you're not already familiar with its concept.

                              1 Reply Last reply
                              1
                              • A Offline
                                A Offline
                                Alireza_13
                                wrote on last edited by
                                #15

                                This can be used for eg. to send debugging information from your GUI to the console; since Debug requires a const char * :

                                QString str = ui->lineEdit->text(); // lineEdit was already defined in a suitable context!
                                Debug(&str.toStdString()[0]);

                                Hope it worked!

                                1 Reply Last reply
                                0
                                • Y Offline
                                  Y Offline
                                  yoavmil
                                  wrote on last edited by
                                  #16

                                  qPrintable is the best way

                                  1 Reply Last reply
                                  0
                                  • D dangelog

                                    http://lmgtfy.com/?q=convert+qstring+to+const+char+*

                                    M Offline
                                    M Offline
                                    MXXIV
                                    wrote on last edited by
                                    #17

                                    @dangelog Actually, I was redirected here from google search, which makes your post look pretty retarded.

                                    1 Reply Last reply
                                    -3
                                    • FranckynosF Offline
                                      FranckynosF Offline
                                      Franckynos
                                      wrote on last edited by
                                      #18

                                      Just QString.c_str() it works for me.

                                      1 Reply Last reply
                                      0

                                      • Login

                                      • Login or register to search.
                                      • First post
                                        Last post
                                      0
                                      • Categories
                                      • Recent
                                      • Tags
                                      • Popular
                                      • Users
                                      • Groups
                                      • Search
                                      • Get Qt Extensions
                                      • Unsolved