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. VirtualKeyboard, Program crash when input out of range char to a QLineEdit with validator

VirtualKeyboard, Program crash when input out of range char to a QLineEdit with validator

Scheduled Pinned Locked Moved Unsolved General and Desktop
15 Posts 3 Posters 1.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.
  • A Offline
    A Offline
    Anima
    wrote on last edited by
    #2

    I write a minimul example here:
    main.cpp

    #include "QtGuiApplication1.h"
    #include <QtWidgets/QApplication>
    
    int main(int argc, char *argv[])
    {
        qputenv("QT_IM_MODULE", "qtvirtualkeyboard");
        QApplication a(argc, argv);
        QtGuiApplication1 w;
        w.show();
        return a.exec();
    }
    

    QtGuiApplication1.h

    #pragma once
    
    #include <QtWidgets/QMainWindow>
    #include <QPushButton>
    
    class QtGuiApplication1 : public QMainWindow
    {
        Q_OBJECT
    
    public:
        QtGuiApplication1(QWidget *parent = Q_NULLPTR);
    
    public slots:
        void onBtnClicked();
    
    private:
        QPushButton*    m_pBtn;
    };
    

    QtGuiApplication1.cpp

    #include "QtGuiApplication1.h"
    
    #include "MyDialog.h"
    
    QtGuiApplication1::QtGuiApplication1(QWidget *parent)
        : QMainWindow(parent)
    {
        m_pBtn = new QPushButton("Click Me");
        setCentralWidget(m_pBtn);
    
        connect(m_pBtn, SIGNAL(clicked()), this, SLOT(onBtnClicked()));
    }
    
    void QtGuiApplication1::onBtnClicked()
    {
        MyDialog dlg;
        dlg.exec();
    }
    

    MyDialog.h

    #pragma once
    
    #include <QDialog>
    #include <QLineEdit>
    
    class MyDialog : public QDialog
    {
    public:
        MyDialog();
        ~MyDialog();
    
    private:
        QLineEdit*  m_pEdit;
    };
    

    MyDialog.cpp

    #include "MyDialog.h"
    
    #include <QRegExpValidator>
    
    MyDialog::MyDialog()
    {
        m_pEdit = new QLineEdit(this);
        m_pEdit->setValidator(new QRegExpValidator(QRegExp(u8"^([0-9]|[1-9][0-9]{1,2})")));
    }
    
    MyDialog::~MyDialog()
    {
    }
    

    When I input "a" from real keyboard, the program crashes.

    1 Reply Last reply
    0
    • SGaistS Offline
      SGaistS Offline
      SGaist
      Lifetime Qt Champion
      wrote on last edited by
      #3

      Hi and welcome to devnet,

      Can you show the stack trace of your crash ?
      Do you have the same issue if you use a QRegularExpressionValidator ?

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

      A 1 Reply Last reply
      0
      • A Offline
        A Offline
        Anima
        wrote on last edited by Anima
        #4

        @SGaist said in VirtualKeyboard, Program crash when input out of range char to a QLineEdit with validator:

        QRegularExpressionValidator

        Thanks, SGaist.
        And Yes. I tryed QRegularExpressionValidator and QIntValidator, still got the same result:

            m_pEdit->setValidator(new QRegularExpressionValidator(QRegularExpression(u8"^([0-9]|[1-9][0-9]{1,2})")));
        //  m_pEdit->setValidator(new QIntValidator(0, 100));
        

        And I noticed that, if I directly put the QLineEdit on MainWindow other than MyDialog, everything is OK.

        1 Reply Last reply
        0
        • A Offline
          A Offline
          Anima
          wrote on last edited by
          #5

          The stack trace.

          1.png

          2.png

          1 Reply Last reply
          0
          • SGaistS SGaist

            Hi and welcome to devnet,

            Can you show the stack trace of your crash ?
            Do you have the same issue if you use a QRegularExpressionValidator ?

            A Offline
            A Offline
            Anima
            wrote on last edited by Anima
            #6

            @SGaist
            Do you have any suggestion? Thank you.

            1 Reply Last reply
            0
            • SGaistS Offline
              SGaistS Offline
              SGaist
              Lifetime Qt Champion
              wrote on last edited by SGaist
              #7

              What if you use the following:

              MyDialog::MyDialog(QWidget *parent):
                  QDialog(parent)
              {
                   m_pEdit = new QLineEdit(this);
                   m_pEdit->setValidator(new QRegularExpressionValidator(QRegExp(u8"^([0-9]|[1-9][0-9]{1,2})")));
              }
               
              MyDialog::~MyDialog()
              {
              }
              

              ?

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

              A 1 Reply Last reply
              0
              • Z Offline
                Z Offline
                zhangqinagqiag
                wrote on last edited by
                #8

                This problem also exists in 5.15.2,As long as it is a pop-up window and uses both virtual keyboard and physical keyboard, it will crash

                1 Reply Last reply
                0
                • SGaistS Offline
                  SGaistS Offline
                  SGaist
                  Lifetime Qt Champion
                  wrote on last edited by
                  #9

                  Which compiler are you using ?

                  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
                  0
                  • SGaistS SGaist

                    What if you use the following:

                    MyDialog::MyDialog(QWidget *parent):
                        QDialog(parent)
                    {
                         m_pEdit = new QLineEdit(this);
                         m_pEdit->setValidator(new QRegularExpressionValidator(QRegExp(u8"^([0-9]|[1-9][0-9]{1,2})")));
                    }
                     
                    MyDialog::~MyDialog()
                    {
                    }
                    

                    ?

                    A Offline
                    A Offline
                    Anima
                    wrote on last edited by Anima
                    #10

                    @SGaist
                    Thanks.
                    The issue still exists after set the parent of MyDialog.
                    The compiler I'm using is Microsoft Visual C++ compiler 14.0.
                    I also tried MinGW 8.1.0 on Windows 10, got the same issue.

                    But on Ubuntu 18.04, the same program, built by Qt5.12.10 and g++, works fine. I think it may be a platfrom specific bug.

                    1 Reply Last reply
                    0
                    • SGaistS Offline
                      SGaistS Offline
                      SGaist
                      Lifetime Qt Champion
                      wrote on last edited by
                      #11

                      Might be indeed.

                      One last test, what happens if you use open in place of exec ?

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

                      A 1 Reply Last reply
                      0
                      • SGaistS SGaist

                        Might be indeed.

                        One last test, what happens if you use open in place of exec ?

                        A Offline
                        A Offline
                        Anima
                        wrote on last edited by
                        #12

                        @SGaist
                        I modified the program as below, and still got the same result. Program crashed after I tapped illegal keys with physical keyboard.

                        void QtGuiApplication1::onBtnClicked()
                        {
                            MyDialog* dlg = new MyDialog(this);
                            dlg->open();
                        }
                        
                        1 Reply Last reply
                        0
                        • SGaistS Offline
                          SGaistS Offline
                          SGaist
                          Lifetime Qt Champion
                          wrote on last edited by
                          #13

                          Then I would say a bug report is the next step.

                          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
                          0
                          • A Offline
                            A Offline
                            Anima
                            wrote on last edited by
                            #14

                            The issue is a known bug QTBUG-9304.
                            Unfortunately, it will not be fixed for Qt5.12.

                            1 Reply Last reply
                            0
                            • SGaistS Offline
                              SGaistS Offline
                              SGaist
                              Lifetime Qt Champion
                              wrote on last edited by
                              #15

                              From the looks of the patch, you should be able to port it to 5.12 and build the module yourself with it.

                              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
                              0

                              • Login

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