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. QWizard : clear focus Next Button
Forum Updated to NodeBB v4.3 + New Features

QWizard : clear focus Next Button

Scheduled Pinned Locked Moved Solved General and Desktop
18 Posts 2 Posters 5.3k 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.
  • F fgdevel

    @mrjj

    with your code, when I call validatePage(), the Next Button is already focused...

    mrjjM Offline
    mrjjM Offline
    mrjj
    Lifetime Qt Champion
    wrote on last edited by
    #6

    @mrjj said:

    validatePage

    This virtual function is called by QWizard::validateCurrentPage() when the user clicks Next or Finish to perform some last-minute validation. If it returns true, the next page is shown (or the wizard finishes); otherwise, the current page stays up.

    So I assumed that is what you wanted?

    F 1 Reply Last reply
    0
    • mrjjM mrjj

      @mrjj said:

      validatePage

      This virtual function is called by QWizard::validateCurrentPage() when the user clicks Next or Finish to perform some last-minute validation. If it returns true, the next page is shown (or the wizard finishes); otherwise, the current page stays up.

      So I assumed that is what you wanted?

      F Offline
      F Offline
      fgdevel
      wrote on last edited by
      #7

      @mrjj

      not at all.
      I want to see the QWizard page but with the focus disabled on the Next button

      mrjjM 1 Reply Last reply
      0
      • F fgdevel

        @mrjj

        not at all.
        I want to see the QWizard page but with the focus disabled on the Next button

        mrjjM Offline
        mrjjM Offline
        mrjj
        Lifetime Qt Champion
        wrote on last edited by
        #8

        @fgdevel
        Ok it means user can still just click on it ?

        You can just set focus to something then using
        setFocus();
        Like one of your own buttons or a textedit.

        F 1 Reply Last reply
        0
        • mrjjM mrjj

          @fgdevel
          Ok it means user can still just click on it ?

          You can just set focus to something then using
          setFocus();
          Like one of your own buttons or a textedit.

          F Offline
          F Offline
          fgdevel
          wrote on last edited by
          #9

          @mrjj

          Yes, it's just the focus I want to remove.
          Because I use i QWizard page, it's not simple

          mrjjM 1 Reply Last reply
          0
          • F fgdevel

            @mrjj

            Yes, it's just the focus I want to remove.
            Because I use i QWizard page, it's not simple

            mrjjM Offline
            mrjjM Offline
            mrjj
            Lifetime Qt Champion
            wrote on last edited by
            #10

            @fgdevel
            By remove focus you mean so that if user hit say enter, then nothing happens?
            Or what is thee goal of what you want?

            F 1 Reply Last reply
            0
            • mrjjM mrjj

              @fgdevel
              By remove focus you mean so that if user hit say enter, then nothing happens?
              Or what is thee goal of what you want?

              F Offline
              F Offline
              fgdevel
              wrote on last edited by
              #11

              @mrjj

              yes it's the goal. When the user press Enter key, nothing happens

              mrjjM 1 Reply Last reply
              0
              • F fgdevel

                @mrjj

                yes it's the goal. When the user press Enter key, nothing happens

                mrjjM Offline
                mrjjM Offline
                mrjj
                Lifetime Qt Champion
                wrote on last edited by mrjj
                #12

                @fgdevel
                but that is 100% what validatePage does.
                If you return false, the Next dont work/nothing happens.
                Dont matter if you hit enter or click on it.

                So that is why im confused of what you really mean.

                F 1 Reply Last reply
                0
                • mrjjM mrjj

                  @fgdevel
                  but that is 100% what validatePage does.
                  If you return false, the Next dont work/nothing happens.
                  Dont matter if you hit enter or click on it.

                  So that is why im confused of what you really mean.

                  F Offline
                  F Offline
                  fgdevel
                  wrote on last edited by
                  #13

                  @mrjj

                  I want Next button works. But just focus not

                  mrjjM 1 Reply Last reply
                  0
                  • F fgdevel

                    @mrjj

                    I want Next button works. But just focus not

                    mrjjM Offline
                    mrjjM Offline
                    mrjj
                    Lifetime Qt Champion
                    wrote on last edited by
                    #14

                    @fgdevel
                    ok so you want user to click on it.

                    Have a look at setFocusProxy();

                    http://ldc.usb.ve/docs/qt/dialogs-complexwizard.html

                    It seems that you can call that in a Pages constructor and then it will give focus to that widget when page is
                    shown.

                    F 1 Reply Last reply
                    0
                    • mrjjM mrjj

                      @fgdevel
                      ok so you want user to click on it.

                      Have a look at setFocusProxy();

                      http://ldc.usb.ve/docs/qt/dialogs-complexwizard.html

                      It seems that you can call that in a Pages constructor and then it will give focus to that widget when page is
                      shown.

                      F Offline
                      F Offline
                      fgdevel
                      wrote on last edited by
                      #15

                      @mrjj

                      I have used diffrent setFocus functions but none of them seems to work...

                      mrjjM 1 Reply Last reply
                      0
                      • F fgdevel

                        @mrjj

                        I have used diffrent setFocus functions but none of them seems to work...

                        mrjjM Offline
                        mrjjM Offline
                        mrjj
                        Lifetime Qt Champion
                        wrote on last edited by
                        #16

                        @fgdevel
                        Hi
                        You are right. by magic it can still hit enter on Next...

                        I changed sample "trivialwizard" to use eventfilter.
                        That can eat the enter key. :)
                        so key changes are
                        class myEventFilter: public QObject // the event filer
                        app.installEventFilter(new myEventFilter()); // using the filter

                        #include <QtWidgets>
                        #include <QTranslator>
                        #include <QLocale>
                        #include <QLibraryInfo>
                        QWizard* wizardp;
                        QWizardPage* createIntroPage() {
                          QWizardPage* page = new QWizardPage;
                          page->setTitle("Introduction");
                        
                          QLabel* label = new QLabel("This wizard will help you register your copy "
                                                     "of Super Product Two.");
                          label->setWordWrap(true);
                          QLineEdit* nameLineEdit = new QLineEdit;
                        
                          QVBoxLayout* layout = new QVBoxLayout;
                          layout->addWidget(label);
                          layout->addWidget(nameLineEdit);
                          page->setLayout(layout);
                        
                        
                          wizardp->button(QWizard::CancelButton)-> setFocus();
                          return page;
                        }
                        
                        QWizardPage* createRegistrationPage()
                        {
                          //! [3]
                          QWizardPage* page = new QWizardPage;
                          page->setTitle("Registration");
                          page->setSubTitle("Please fill both fields.");
                        
                          QLabel* nameLabel = new QLabel("Name:");
                          QLineEdit* nameLineEdit = new QLineEdit;
                        
                          QLabel* emailLabel = new QLabel("Email address:");
                          QLineEdit* emailLineEdit = new QLineEdit;
                        
                          QGridLayout* layout = new QGridLayout;
                          layout->addWidget(nameLabel, 0, 0);
                          layout->addWidget(nameLineEdit, 0, 1);
                          layout->addWidget(emailLabel, 1, 0);
                          layout->addWidget(emailLineEdit, 1, 1);
                          page->setLayout(layout);
                        
                          return page;
                          //! [4]
                        }
                        //! [2] //! [4]
                        
                        //! [5] //! [6]
                        QWizardPage* createConclusionPage()
                        //! [5] //! [7]
                        {
                          //! [7]
                          QWizardPage* page = new QWizardPage;
                          page->setTitle("Conclusion");
                        
                          QLabel* label = new QLabel("You are now successfully registered. Have a "
                                                     "nice day!");
                          label->setWordWrap(true);
                        
                          QVBoxLayout* layout = new QVBoxLayout;
                          layout->addWidget(label);
                          page->setLayout(layout);
                        
                          return page;
                          //! [8]
                        }
                        //! [6] //! [8]
                        // this you need
                        class myEventFilter: public QObject {
                         public:
                          myEventFilter(): QObject() {}
                          ~myEventFilter() {}
                          bool eventFilter(QObject* object, QEvent* event) {
                            if (event->type() == QEvent::KeyPress) {
                              QKeyEvent* key = static_cast<QKeyEvent*>(event);
                              if ( (key->key() == Qt::Key_Enter) || (key->key() == Qt::Key_Return) ) {
                                event->ignore();
                              } else {
                                return QObject::eventFilter(object, event);
                              }
                            }
                          }
                        };
                        
                        //! [9] //! [10]
                        int main(int argc, char* argv[])
                        //! [9] //! [11]
                        {
                          QApplication app(argc, argv);
                        
                        #ifndef QT_NO_TRANSLATION
                          QString translatorFileName = QLatin1String("qt_");
                          translatorFileName += QLocale::system().name();
                          QTranslator* translator = new QTranslator(&app);
                          if (translator->load(translatorFileName, QLibraryInfo::location(QLibraryInfo::TranslationsPath)))
                            app.installTranslator(translator);
                        #endif
                        
                          QWizard wizard;
                          wizardp = &wizard;
                          wizard.addPage(createIntroPage());
                          wizard.addPage(createRegistrationPage());
                          wizard.addPage(createConclusionPage());
                        
                          wizard.setWindowTitle("Trivial Wizard");
                          wizard.show();
                          app.installEventFilter(new myEventFilter()); // install filter
                          return app.exec();
                        }
                        //! [10] //! [11]
                        
                        F 1 Reply Last reply
                        0
                        • mrjjM mrjj

                          @fgdevel
                          Hi
                          You are right. by magic it can still hit enter on Next...

                          I changed sample "trivialwizard" to use eventfilter.
                          That can eat the enter key. :)
                          so key changes are
                          class myEventFilter: public QObject // the event filer
                          app.installEventFilter(new myEventFilter()); // using the filter

                          #include <QtWidgets>
                          #include <QTranslator>
                          #include <QLocale>
                          #include <QLibraryInfo>
                          QWizard* wizardp;
                          QWizardPage* createIntroPage() {
                            QWizardPage* page = new QWizardPage;
                            page->setTitle("Introduction");
                          
                            QLabel* label = new QLabel("This wizard will help you register your copy "
                                                       "of Super Product Two.");
                            label->setWordWrap(true);
                            QLineEdit* nameLineEdit = new QLineEdit;
                          
                            QVBoxLayout* layout = new QVBoxLayout;
                            layout->addWidget(label);
                            layout->addWidget(nameLineEdit);
                            page->setLayout(layout);
                          
                          
                            wizardp->button(QWizard::CancelButton)-> setFocus();
                            return page;
                          }
                          
                          QWizardPage* createRegistrationPage()
                          {
                            //! [3]
                            QWizardPage* page = new QWizardPage;
                            page->setTitle("Registration");
                            page->setSubTitle("Please fill both fields.");
                          
                            QLabel* nameLabel = new QLabel("Name:");
                            QLineEdit* nameLineEdit = new QLineEdit;
                          
                            QLabel* emailLabel = new QLabel("Email address:");
                            QLineEdit* emailLineEdit = new QLineEdit;
                          
                            QGridLayout* layout = new QGridLayout;
                            layout->addWidget(nameLabel, 0, 0);
                            layout->addWidget(nameLineEdit, 0, 1);
                            layout->addWidget(emailLabel, 1, 0);
                            layout->addWidget(emailLineEdit, 1, 1);
                            page->setLayout(layout);
                          
                            return page;
                            //! [4]
                          }
                          //! [2] //! [4]
                          
                          //! [5] //! [6]
                          QWizardPage* createConclusionPage()
                          //! [5] //! [7]
                          {
                            //! [7]
                            QWizardPage* page = new QWizardPage;
                            page->setTitle("Conclusion");
                          
                            QLabel* label = new QLabel("You are now successfully registered. Have a "
                                                       "nice day!");
                            label->setWordWrap(true);
                          
                            QVBoxLayout* layout = new QVBoxLayout;
                            layout->addWidget(label);
                            page->setLayout(layout);
                          
                            return page;
                            //! [8]
                          }
                          //! [6] //! [8]
                          // this you need
                          class myEventFilter: public QObject {
                           public:
                            myEventFilter(): QObject() {}
                            ~myEventFilter() {}
                            bool eventFilter(QObject* object, QEvent* event) {
                              if (event->type() == QEvent::KeyPress) {
                                QKeyEvent* key = static_cast<QKeyEvent*>(event);
                                if ( (key->key() == Qt::Key_Enter) || (key->key() == Qt::Key_Return) ) {
                                  event->ignore();
                                } else {
                                  return QObject::eventFilter(object, event);
                                }
                              }
                            }
                          };
                          
                          //! [9] //! [10]
                          int main(int argc, char* argv[])
                          //! [9] //! [11]
                          {
                            QApplication app(argc, argv);
                          
                          #ifndef QT_NO_TRANSLATION
                            QString translatorFileName = QLatin1String("qt_");
                            translatorFileName += QLocale::system().name();
                            QTranslator* translator = new QTranslator(&app);
                            if (translator->load(translatorFileName, QLibraryInfo::location(QLibraryInfo::TranslationsPath)))
                              app.installTranslator(translator);
                          #endif
                          
                            QWizard wizard;
                            wizardp = &wizard;
                            wizard.addPage(createIntroPage());
                            wizard.addPage(createRegistrationPage());
                            wizard.addPage(createConclusionPage());
                          
                            wizard.setWindowTitle("Trivial Wizard");
                            wizard.show();
                            app.installEventFilter(new myEventFilter()); // install filter
                            return app.exec();
                          }
                          //! [10] //! [11]
                          
                          F Offline
                          F Offline
                          fgdevel
                          wrote on last edited by
                          #17

                          @mrjj

                          I've found a solution with :

                          this->setOptions(QWizard::NoDefaultButton);
                          this->setOption(QWizard::NoDefaultButton, true);

                          mrjjM 1 Reply Last reply
                          1
                          • F fgdevel

                            @mrjj

                            I've found a solution with :

                            this->setOptions(QWizard::NoDefaultButton);
                            this->setOption(QWizard::NoDefaultButton, true);

                            mrjjM Offline
                            mrjjM Offline
                            mrjj
                            Lifetime Qt Champion
                            wrote on last edited by mrjj
                            #18

                            @fgdevel
                            super.
                            Thank you for reporting back.

                            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