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 use QString.arg
Forum Updated to NodeBB v4.3 + New Features

How to use QString.arg

Scheduled Pinned Locked Moved Unsolved General and Desktop
11 Posts 3 Posters 6.0k Views
  • 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.
  • W Offline
    W Offline
    Weichao Wang
    wrote on last edited by
    #2

    Actually there are several static number() functions. But none of them contains fieldwidth and fillchar.

    1 Reply Last reply
    0
    • W Weichao Wang

      Dear all,
      runningDate is a QDateTime object with the date value of 12.Aug.2018. With the following command
      cout << QString("%1").arg(runningDate.date().month(), 2, '0').toStdString() << endl;
      I expect the output "08", since fieldwidth is 2 and fillchar is 0. But the output is "8". How can integer 8 be converted into "08"?
      Weichao

      JonBJ Online
      JonBJ Online
      JonB
      wrote on last edited by
      #3

      @Weichao-Wang
      I believe you are trying to use this overload:
      http://doc.qt.io/qt-5/qstring.html#arg-4
      QString QString::arg(int a, int fieldWidth = 0, int base = 10, QChar fillChar = QLatin1Char(' ')) const

      So I make your parameters wrong. I think you're passing '0' as the base (so base 48!) and therefore ' ' as the fillChar, so I would guess you're actually seeing <space>8 as the output?

      Try:

      QString("%1").arg(runningDate.date().month(), 2, 10, '0').toStdString() 
      

      ?

      1 Reply Last reply
      0
      • W Offline
        W Offline
        Weichao Wang
        wrote on last edited by
        #4

        Now the output is 8.000000000... (some 30 '0').

        1 Reply Last reply
        0
        • W Offline
          W Offline
          Weichao Wang
          wrote on last edited by
          #5

          In the documentation we can find
          QString QString::arg ( const QString & a, int fieldWidth = 0, const QChar & fillChar = QLatin1Char( ' ' ) ) const
          It contains only 3 parameters.
          I'm using Qt 4.6.

          JonBJ 1 Reply Last reply
          0
          • J.HilkJ Offline
            J.HilkJ Offline
            J.Hilk
            Moderators
            wrote on last edited by
            #6

            @Weichao-Wang why reinventing the wheel?

            cout << runningDate.toString("MM").toStdString() << endl;


            Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


            Q: What's that?
            A: It's blue light.
            Q: What does it do?
            A: It turns blue.

            W 1 Reply Last reply
            3
            • W Offline
              W Offline
              Weichao Wang
              wrote on last edited by
              #7

              Now I've changed the line into following and the output is 08:
              cout << QString("%1").arg(QString::number(runningDate.date().month()), 2, '0').toStdString() << endl;
              I miss something like:
              static QString QString::number(int a, int fieldWidth = 0, int base = 10, QChar fillChar = QLatin1Char(' '))
              which would convert an interger into a string with desired length and fillchar without creating a QString object.

              1 Reply Last reply
              0
              • W Weichao Wang

                In the documentation we can find
                QString QString::arg ( const QString & a, int fieldWidth = 0, const QChar & fillChar = QLatin1Char( ' ' ) ) const
                It contains only 3 parameters.
                I'm using Qt 4.6.

                JonBJ Online
                JonBJ Online
                JonB
                wrote on last edited by JonB
                #8

                @Weichao-Wang said in How to use QString.arg:

                In the documentation we can find
                QString QString::arg ( const QString & a, int fieldWidth = 0, const QChar & fillChar = QLatin1Char( ' ' ) ) const
                It contains only 3 parameters.
                I'm using Qt 4.6.

                Your code reads:

                QString("%1").arg(runningDate.date().month(), 2, '0')
                

                QDate::date().month() returns an int not a QString. So how do you figure it is calling your overload with const QString & a?

                W 1 Reply Last reply
                0
                • J.HilkJ J.Hilk

                  @Weichao-Wang why reinventing the wheel?

                  cout << runningDate.toString("MM").toStdString() << endl;

                  W Offline
                  W Offline
                  Weichao Wang
                  wrote on last edited by
                  #9

                  @J.Hilk
                  this is ingenious! Thank you!
                  Actually I need "20180803" for 3.Aug.2018. With date.toString("yyyyMMdd") I've solved the problem with one stroke.
                  But for a normal integer i can we only use the following or is there a simpler conversion?
                  QString("%1").arg(QString::number(i), 2, '0' )

                  J.HilkJ 1 Reply Last reply
                  0
                  • JonBJ JonB

                    @Weichao-Wang said in How to use QString.arg:

                    In the documentation we can find
                    QString QString::arg ( const QString & a, int fieldWidth = 0, const QChar & fillChar = QLatin1Char( ' ' ) ) const
                    It contains only 3 parameters.
                    I'm using Qt 4.6.

                    Your code reads:

                    QString("%1").arg(runningDate.date().month(), 2, '0')
                    

                    QDate::date().month() returns an int not a QString. So how do you figure it is calling your overload with const QString & a?

                    W Offline
                    W Offline
                    Weichao Wang
                    wrote on last edited by
                    #10

                    @JonB said in How to use QString.arg:

                    @Weichao-Wang said in How to use QString.arg:

                    In the documentation we can find
                    QString QString::arg ( const QString & a, int fieldWidth = 0, const QChar & fillChar = QLatin1Char( ' ' ) ) const
                    It contains only 3 parameters.
                    I'm using Qt 4.6.

                    Your code reads:

                    QString("%1").arg(runningDate.date().month(), 2, '0')
                    

                    QDate::date().month() returns an int not a QString. So how do you figure it is calling your overload with const QString & a?

                    Yes, I've noticed the problem and changed it to
                    QString("%1").arg(QString::number(i), 2, '0')

                    1 Reply Last reply
                    0
                    • W Weichao Wang

                      @J.Hilk
                      this is ingenious! Thank you!
                      Actually I need "20180803" for 3.Aug.2018. With date.toString("yyyyMMdd") I've solved the problem with one stroke.
                      But for a normal integer i can we only use the following or is there a simpler conversion?
                      QString("%1").arg(QString::number(i), 2, '0' )

                      J.HilkJ Offline
                      J.HilkJ Offline
                      J.Hilk
                      Moderators
                      wrote on last edited by
                      #11

                      @Weichao-Wang like @JonB said all overloads of arg that accept an int want a base to convert it to string

                      QString("%1").arg(QString::number(i), 2, '0' );
                      ==
                      QString("%1").arg(i, 2, 10, QChar('0') );


                      Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


                      Q: What's that?
                      A: It's blue light.
                      Q: What does it do?
                      A: It turns blue.

                      1 Reply Last reply
                      3

                      • Login

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