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. QStackedWidget: How to check if the next widget should be shown
Forum Updated to NodeBB v4.3 + New Features

QStackedWidget: How to check if the next widget should be shown

Scheduled Pinned Locked Moved Solved General and Desktop
qstackedwidgetqstackedwidgets
25 Posts 4 Posters 4.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.
  • J J.Hilk
    21 Nov 2019, 11:38

    @hobbyProgrammer

    A Signal must not have a definition, only a declaration.

    The definition is made automatically in generated code by moc

    H Offline
    H Offline
    hobbyProgrammer
    wrote on 21 Nov 2019, 12:33 last edited by
    #13

    @J-Hilk alright, but how would I check if the login is correct if there's no function definition?

    J J 2 Replies Last reply 21 Nov 2019, 12:36
    0
    • H hobbyProgrammer
      21 Nov 2019, 12:33

      @J-Hilk alright, but how would I check if the login is correct if there's no function definition?

      J Offline
      J Offline
      J.Hilk
      Moderators
      wrote on 21 Nov 2019, 12:36 last edited by J.Hilk
      #14

      @hobbyProgrammer

      the idea would be, that you emit the signal, as soon as your function verifies, that the login was successful !

      void LoginWidget::on_pushButton_clicked()
      {
             QString username = ui->lineEdit_2->text();
              QString password = ui->lineEdit->text();
          
              if(username == "Test" && password == "Test123")
              {
                   emit loginSuccessful();
              }
      }
      

      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
      • H hobbyProgrammer
        21 Nov 2019, 12:33

        @J-Hilk alright, but how would I check if the login is correct if there's no function definition?

        J Offline
        J Offline
        JonB
        wrote on 21 Nov 2019, 12:37 last edited by JonB
        #15

        @hobbyProgrammer
        Subject to @J-Hilk suggesting an alternative, as I wrote earlier retain your loginSuccesfull() as the slot for the pushbutton click. Have it emit a signal you define on successful validation of the widgets, the signal is a separate thing from your function which you must define as per the Qt/C++ rules.

        EDIT OK, @J-Hilk's code is the same thing, it's just that he has defined the pushbutton slot as on_pushButton_clicked() and the signal as logInSuccessful, so there is no longer any (non-signal) function named loginSuccesfull().

        H 1 Reply Last reply 21 Nov 2019, 12:53
        0
        • J JonB
          21 Nov 2019, 12:37

          @hobbyProgrammer
          Subject to @J-Hilk suggesting an alternative, as I wrote earlier retain your loginSuccesfull() as the slot for the pushbutton click. Have it emit a signal you define on successful validation of the widgets, the signal is a separate thing from your function which you must define as per the Qt/C++ rules.

          EDIT OK, @J-Hilk's code is the same thing, it's just that he has defined the pushbutton slot as on_pushButton_clicked() and the signal as logInSuccessful, so there is no longer any (non-signal) function named loginSuccesfull().

          H Offline
          H Offline
          hobbyProgrammer
          wrote on 21 Nov 2019, 12:53 last edited by
          #16

          @JonB alright, so using that code and these lines:

              LoginWidget *login = qobject_cast<LoginWidget*>(ui->stackedWidget->widget(0));
              connect(login, SIGNAL(loginSuccesfull()), this, SLOT(showApp()));
          

          should result in showApp to happen anytime the login was succesfull?

          J 1 Reply Last reply 21 Nov 2019, 13:04
          0
          • H hobbyProgrammer
            21 Nov 2019, 12:53

            @JonB alright, so using that code and these lines:

                LoginWidget *login = qobject_cast<LoginWidget*>(ui->stackedWidget->widget(0));
                connect(login, SIGNAL(loginSuccesfull()), this, SLOT(showApp()));
            

            should result in showApp to happen anytime the login was succesfull?

            J Offline
            J Offline
            JonB
            wrote on 21 Nov 2019, 13:04 last edited by
            #17

            @hobbyProgrammer
            I'm hoping so! Did you try it?

            H 1 Reply Last reply 21 Nov 2019, 13:09
            0
            • J JonB
              21 Nov 2019, 13:04

              @hobbyProgrammer
              I'm hoping so! Did you try it?

              H Offline
              H Offline
              hobbyProgrammer
              wrote on 21 Nov 2019, 13:09 last edited by
              #18

              @JonB yes and it didn't work. I tried debugging but I can't seem to find what's going wrong. It hits the code where the emit loginSuccessfull() is set, but it doesn't go to the SLOT where it's connected to and it ends in :

              while (!d->exit.loadAcquire())
                      processEvents(flags | WaitForMoreEvents | EventLoopExec);
              
              J 1 Reply Last reply 21 Nov 2019, 13:13
              0
              • H hobbyProgrammer
                21 Nov 2019, 13:09

                @JonB yes and it didn't work. I tried debugging but I can't seem to find what's going wrong. It hits the code where the emit loginSuccessfull() is set, but it doesn't go to the SLOT where it's connected to and it ends in :

                while (!d->exit.loadAcquire())
                        processEvents(flags | WaitForMoreEvents | EventLoopExec);
                
                J Offline
                J Offline
                jsulm
                Lifetime Qt Champion
                wrote on 21 Nov 2019, 13:13 last edited by
                #19

                @hobbyProgrammer Did you make sure

                connect(login, SIGNAL(loginSuccesfull()), this, SLOT(showApp()));
                

                succeeded? And is this "login" the one you're actually showing?

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

                H 1 Reply Last reply 21 Nov 2019, 13:18
                1
                • J jsulm
                  21 Nov 2019, 13:13

                  @hobbyProgrammer Did you make sure

                  connect(login, SIGNAL(loginSuccesfull()), this, SLOT(showApp()));
                  

                  succeeded? And is this "login" the one you're actually showing?

                  H Offline
                  H Offline
                  hobbyProgrammer
                  wrote on 21 Nov 2019, 13:18 last edited by
                  #20

                  @jsulm
                  it should be since I'm doing this:

                      LoginWidget *login = qobject_cast<LoginWidget*>(ui->stackedWidget->widget(0));
                  
                  J 1 Reply Last reply 21 Nov 2019, 13:19
                  0
                  • H hobbyProgrammer
                    21 Nov 2019, 13:18

                    @jsulm
                    it should be since I'm doing this:

                        LoginWidget *login = qobject_cast<LoginWidget*>(ui->stackedWidget->widget(0));
                    
                    J Offline
                    J Offline
                    jsulm
                    Lifetime Qt Champion
                    wrote on 21 Nov 2019, 13:19 last edited by
                    #21

                    @hobbyProgrammer And connect succeeded?

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

                    H 1 Reply Last reply 21 Nov 2019, 13:24
                    1
                    • J jsulm
                      21 Nov 2019, 13:19

                      @hobbyProgrammer And connect succeeded?

                      H Offline
                      H Offline
                      hobbyProgrammer
                      wrote on 21 Nov 2019, 13:24 last edited by
                      #22

                      @jsulm I'm not sure, but I don't think so.

                      J 1 Reply Last reply 21 Nov 2019, 13:26
                      0
                      • H hobbyProgrammer
                        21 Nov 2019, 13:24

                        @jsulm I'm not sure, but I don't think so.

                        J Offline
                        J Offline
                        jsulm
                        Lifetime Qt Champion
                        wrote on 21 Nov 2019, 13:26 last edited by
                        #23

                        @hobbyProgrammer said in QStackedWidget: How to check if the next widget should be shown:

                        but I don't think so

                        Then it can't work.
                        Use new Qt5 connect syntax to be sure signal/slot are really connected:

                        connect(login, &LoginWidget::loginSuccesfull, this, &MainWindow::showApp);
                        

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

                        H 1 Reply Last reply 21 Nov 2019, 13:27
                        2
                        • J jsulm
                          21 Nov 2019, 13:26

                          @hobbyProgrammer said in QStackedWidget: How to check if the next widget should be shown:

                          but I don't think so

                          Then it can't work.
                          Use new Qt5 connect syntax to be sure signal/slot are really connected:

                          connect(login, &LoginWidget::loginSuccesfull, this, &MainWindow::showApp);
                          
                          H Offline
                          H Offline
                          hobbyProgrammer
                          wrote on 21 Nov 2019, 13:27 last edited by
                          #24

                          @jsulm yes thank you. That worked!

                          Thank you so much for you patience and help.

                          1 Reply Last reply
                          0
                          • J Offline
                            J Offline
                            J.Hilk
                            Moderators
                            wrote on 21 Nov 2019, 13:27 last edited by
                            #25

                            Because this is getting out of hand:

                            https://github.com/DeiVadder/LoginExample


                            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
                            4

                            22/25

                            21 Nov 2019, 13:24

                            • Login

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