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. [Re-ReOpened) Easy input mask
Qt 6.11 is out! See what's new in the release blog

[Re-ReOpened) Easy input mask

Scheduled Pinned Locked Moved Unsolved General and Desktop
21 Posts 5 Posters 12.4k Views 2 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.
  • VRoninV Offline
    VRoninV Offline
    VRonin
    wrote on last edited by
    #10

    @Wieland QRegExp should be banished from new code. The only place I still use it over QRegularExpression is QSortFilterProxyModel::filterRegExp just because I don't have a choice. see http://doc.qt.io/qt-5/qregularexpression.html#notes-for-qregexp-users

    @yczo you might be interested in: http://www.bogotobogo.com/cplusplus/files/c-gui-programming-with-qt-4-2ndedition.pdf

    "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
    ~Napoleon Bonaparte

    On a crusade to banish setIndexWidget() from the holy land of Qt

    ? 1 Reply Last reply
    0
    • VRoninV VRonin

      @Wieland QRegExp should be banished from new code. The only place I still use it over QRegularExpression is QSortFilterProxyModel::filterRegExp just because I don't have a choice. see http://doc.qt.io/qt-5/qregularexpression.html#notes-for-qregexp-users

      @yczo you might be interested in: http://www.bogotobogo.com/cplusplus/files/c-gui-programming-with-qt-4-2ndedition.pdf

      ? Offline
      ? Offline
      A Former User
      wrote on last edited by
      #11

      @VRonin Oh yes, right. Old habits die hard :-)

      1 Reply Last reply
      0
      • yczoY Offline
        yczoY Offline
        yczo
        wrote on last edited by yczo
        #12

        hello un thank you, A question more...

        But with this code some fails. I can only the first validator a4 write, a3 don't work. The expresion dont work, only a4. Why might it be?

        /    const QString a4 = "[0-9A-Za-Z]{4}";
            const QString a3 = "[0-9A-Za-Z]{3}";
            const QString expression = QString("%1\\s\\:\\s%1\\s\\/%2\\s%2\\s\\-\\s%1").arg(a4).arg(a3);
            QRegExp rx(expression);
            QValidator *validator = new QRegExpValidator(rx, this);
            ui->lineEdit->setValidator(validator);
        /your code here
        

        Thanks in advance

        ? 1 Reply Last reply
        0
        • yczoY yczo

          hello un thank you, A question more...

          But with this code some fails. I can only the first validator a4 write, a3 don't work. The expresion dont work, only a4. Why might it be?

          /    const QString a4 = "[0-9A-Za-Z]{4}";
              const QString a3 = "[0-9A-Za-Z]{3}";
              const QString expression = QString("%1\\s\\:\\s%1\\s\\/%2\\s%2\\s\\-\\s%1").arg(a4).arg(a3);
              QRegExp rx(expression);
              QValidator *validator = new QRegExpValidator(rx, this);
              ui->lineEdit->setValidator(validator);
          /your code here
          

          Thanks in advance

          ? Offline
          ? Offline
          A Former User
          wrote on last edited by A Former User
          #13

          @yczo You also need to enter the spaces, the colon, the slash and the dash.

          1 Reply Last reply
          0
          • yczoY Offline
            yczoY Offline
            yczo
            wrote on last edited by yczo
            #14

            Upssss....thank you very much, as could not see the extra characters, like in ui->lineEdit->setInputMask("NNN:NNNN /NNN NNN - NNNN;X");

            is there a way to merge both? Because

                ui->setupUi(this);
               // ui->lineEdit->inputMask ;
            
              //  ui->getLine->setMaxLength(sizeMSG);
              //  ui->lineEdit->setInputMask("nnn;A");
               // ui->lineEdit->setInputMask("nnn;");
              //  ui->lineEdit->adjustSize();
            
            ui->lineEdit->setInputMask("NNN:NNN/NNN;X");
            const QString a0 = "[0-9A-Za-Z]{3}";
            const QString a1 = "[0-9A-Za-Z]{3}";
            const QString a2 = "[0-9A-Za-Z]{3}";
            const QString expression = QString("%1\\:\\%2\\/\\%3").arg(a0).arg(a1).arg(a2);
            //ui->lineEdit->setCursorPosition(0);
             //   const QString a4 = "[0-9A-Za-Z]{4}";
             //   const QString a3 = "[0-9A-Za-Z]{3}";
             //   const QString expression = QString("%1\\s\\:\\s%1\\s\\/%2\\s%2\\s\\-\\s%1").arg(a4).arg(a3);
            
                QRegExp rx(expression);
                QValidator *validator = new QRegExpValidator(rx, this);
                ui->lineEdit->setValidator(validator);
            
                ui->lineEdit->setFixedWidth(600);
                ui->lineEdit->setCursorPosition(0);
            

            don't works.

            Greetings

            ? 1 Reply Last reply
            0
            • yczoY yczo

              Upssss....thank you very much, as could not see the extra characters, like in ui->lineEdit->setInputMask("NNN:NNNN /NNN NNN - NNNN;X");

              is there a way to merge both? Because

                  ui->setupUi(this);
                 // ui->lineEdit->inputMask ;
              
                //  ui->getLine->setMaxLength(sizeMSG);
                //  ui->lineEdit->setInputMask("nnn;A");
                 // ui->lineEdit->setInputMask("nnn;");
                //  ui->lineEdit->adjustSize();
              
              ui->lineEdit->setInputMask("NNN:NNN/NNN;X");
              const QString a0 = "[0-9A-Za-Z]{3}";
              const QString a1 = "[0-9A-Za-Z]{3}";
              const QString a2 = "[0-9A-Za-Z]{3}";
              const QString expression = QString("%1\\:\\%2\\/\\%3").arg(a0).arg(a1).arg(a2);
              //ui->lineEdit->setCursorPosition(0);
               //   const QString a4 = "[0-9A-Za-Z]{4}";
               //   const QString a3 = "[0-9A-Za-Z]{3}";
               //   const QString expression = QString("%1\\s\\:\\s%1\\s\\/%2\\s%2\\s\\-\\s%1").arg(a4).arg(a3);
              
                  QRegExp rx(expression);
                  QValidator *validator = new QRegExpValidator(rx, this);
                  ui->lineEdit->setValidator(validator);
              
                  ui->lineEdit->setFixedWidth(600);
                  ui->lineEdit->setCursorPosition(0);
              

              don't works.

              Greetings

              ? Offline
              ? Offline
              A Former User
              wrote on last edited by
              #15

              @yczo said:

              is there a way to merge both?

              Yes, just make the parts of the input optional, like this:

                  ui->setupUi(this);
                  ui->lineEdit->setInputMask("NNN : NNN");
              
                  const QString a0 = "[ 0-9A-Za-z]{3}"; // space before 0
                  const QString space = "\\s";
                  const QString colon = "\\:";
                  const QString expression = QString("%1%2%3%2%1").arg(a0).arg(space).arg(colon);
                  QRegExp rx(expression);
                  QValidator *validator = new QRegExpValidator(rx, this);
                  ui->lineEdit->setValidator(validator);
              
              1 Reply Last reply
              2
              • yczoY Offline
                yczoY Offline
                yczo
                wrote on last edited by yczo
                #16

                thank you that was great.

                1 Reply Last reply
                0
                • yczoY Offline
                  yczoY Offline
                  yczo
                  wrote on last edited by
                  #17

                  The last question, ist posible set a max int value in the string (after other characters)?

                  for example A37 (37 is the max),We could write from A00, A01.., to A37

                  Greetings

                  ? 1 Reply Last reply
                  0
                  • yczoY yczo

                    The last question, ist posible set a max int value in the string (after other characters)?

                    for example A37 (37 is the max),We could write from A00, A01.., to A37

                    Greetings

                    ? Offline
                    ? Offline
                    A Former User
                    wrote on last edited by
                    #18

                    @yczo Yes, you can do this by adjusting the regular expression.

                    1 Reply Last reply
                    1
                    • yczoY Offline
                      yczoY Offline
                      yczo
                      wrote on last edited by
                      #19

                      Please, can you show me how to make it? Because I tried several options but, I have not luck.

                      That is my idea

                          ui->leStr->setInputMask("A99");
                      
                                                              //el conjunto para tanto espacios
                          const QString id ="[ (A,M,O)]{1}";  //espacio delante para poder editar
                          const QString cm ="[ 0-9]{2}";
                      
                          //const QString sl ="[0-50]{2}";
                          const QString expr = QString("%1%2").arg(id).arg(cm);
                          QRegExp cmp(expr);
                          QValidator *vld = new QRegExpValidator(cmp,this);
                          ui->leStr->setValidator(vld);
                          ui->leStr->setCursorPosition(0);
                      
                      1 Reply Last reply
                      0
                      • yczoY Offline
                        yczoY Offline
                        yczo
                        wrote on last edited by yczo
                        #20

                        That is another idea, but don't work too

                        ui->le1->setInputMask("99");
                        ui->le1->setValidator(new QDoubleValidator(01,10,1,this));
                        ui->le1->setCursorPosition(0);
                        

                        or

                        ui->le1->setInputMask("99");
                        ui->le1->setValidator(new QIntValidator(1,10,this));
                        ui->le1->setCursorPosition(0);
                        

                        i don't understand what I make wrong,

                        Greetings

                        Edit---
                        ok i discovered that,

                        ui->le1->setValidator(new QIntValidator(1,10,this));

                        work good for integers, but, only in a separate field. how to make all together, that is another story und not idea XDD

                        1 Reply Last reply
                        0
                        • jsulmJ Offline
                          jsulmJ Offline
                          jsulm
                          Lifetime Qt Champion
                          wrote on last edited by
                          #21

                          For your example (max A37) it should be like this:

                          A[0-3][0-7]
                          

                          https://forum.qt.io/topic/113070/qt-code-of-conduct

                          1 Reply Last reply
                          2

                          • Login

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