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. Don't close the window when clicking "OK" QDialog

Don't close the window when clicking "OK" QDialog

Scheduled Pinned Locked Moved Solved General and Desktop
18 Posts 4 Posters 4.7k 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.
  • JonBJ JonB

    @Idodoqdo said in Don't close the window when clicking "OK" QDialog:

    connect(ui->buttonBox, SIGNAL(accepted()), this, SLOT(SendInfo()));

    I am somewhat surprised this works. What type is ui->buttonBox? It does not help that you are using the old style SIGNAL/SLOT() macros to connect(), which were deprecated a decade ago.

    I Offline
    I Offline
    Idodoqdo
    wrote on last edited by
    #9

    @JonB And what do you not like about this way? Why is he bad? Can you suggest better?

    1 Reply Last reply
    0
    • JonBJ JonB

      @Idodoqdo said in Don't close the window when clicking "OK" QDialog:

      connect(ui->buttonBox, SIGNAL(accepted()), this, SLOT(SendInfo()));

      I am somewhat surprised this works. What type is ui->buttonBox? It does not help that you are using the old style SIGNAL/SLOT() macros to connect(), which were deprecated a decade ago.

      I Offline
      I Offline
      Idodoqdo
      wrote on last edited by
      #10

      @JonB
      rewrote like this:

      connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &AuthorizationView::SendInfo);
      
      JonBJ 1 Reply Last reply
      2
      • I Idodoqdo

        @JonB
        rewrote like this:

        connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &AuthorizationView::SendInfo);
        
        JonBJ Offline
        JonBJ Offline
        JonB
        wrote on last edited by
        #11

        @Idodoqdo
        That is much better/clearer/safer. It will also tell you if anything is wrong at compile-time. Basically for your purposes you should continue to do connect()s using this syntax all the time.

        I 1 Reply Last reply
        0
        • JonBJ JonB

          @Idodoqdo
          That is much better/clearer/safer. It will also tell you if anything is wrong at compile-time. Basically for your purposes you should continue to do connect()s using this syntax all the time.

          I Offline
          I Offline
          Idodoqdo
          wrote on last edited by
          #12

          @JonB said in Don't close the window when clicking "OK" QDialog:

          That is much better/clearer/safer. It will also tell you if anything is wrong at compile-time. Basically for your purposes you should continue to do connect()s using this syntax all the time.

          thx

          1 Reply Last reply
          0
          • S Offline
            S Offline
            SimonSchroeder
            wrote on last edited by
            #13

            Does using a QDialogButtonBox within a ui file automatically connect its signals with the surrounding QDialog? I have created a QDialog and a QDialogButtonBox with code instead and there I need to connect the signals myself in order to have the buttons of the QDialogButtonBox do anything at all.

            JonBJ 1 Reply Last reply
            0
            • S SimonSchroeder

              Does using a QDialogButtonBox within a ui file automatically connect its signals with the surrounding QDialog? I have created a QDialog and a QDialogButtonBox with code instead and there I need to connect the signals myself in order to have the buttons of the QDialogButtonBox do anything at all.

              JonBJ Offline
              JonBJ Offline
              JonB
              wrote on last edited by
              #14

              @SimonSchroeder
              Is this not what the OP's connect(ui->buttonBox, &QDialogButtonBox::accepted, ...) already does?

              S 1 Reply Last reply
              0
              • JonBJ JonB

                @SimonSchroeder
                Is this not what the OP's connect(ui->buttonBox, &QDialogButtonBox::accepted, ...) already does?

                S Offline
                S Offline
                SimonSchroeder
                wrote on last edited by
                #15

                @JonB said in Don't close the window when clicking "OK" QDialog:

                Is this not what the OP's connect(ui->buttonBox, &QDialogButtonBox::accepted, ...) already does?

                Usually, you would connect to QDialog::accept. So, somewhere I would expect that the dialog is closed on purpose if there is no automatic connection between QDialogButtonBox::accepted and QDialog::accept. Why else would it close?

                JonBJ 1 Reply Last reply
                0
                • S SimonSchroeder

                  @JonB said in Don't close the window when clicking "OK" QDialog:

                  Is this not what the OP's connect(ui->buttonBox, &QDialogButtonBox::accepted, ...) already does?

                  Usually, you would connect to QDialog::accept. So, somewhere I would expect that the dialog is closed on purpose if there is no automatic connection between QDialogButtonBox::accepted and QDialog::accept. Why else would it close?

                  JonBJ Offline
                  JonBJ Offline
                  JonB
                  wrote on last edited by
                  #16

                  @SimonSchroeder
                  Ah, I think I understand you now. I haven't used a QDialogButtonBox. You don't mind the QDialogButtonBox::accepted signal having a slot, but you would expect that to accept the dialog and then the dialog's accepted to do the action, right? Like

                  connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept);
                  connect(this, &QDialog::accepted, this, &AuthorizationView::SendInfo);
                  

                  Is this what you had in mind?

                  But I think there is a wrinkle. The OP's question is "Don't close the window when clicking "OK" QDialog", which the above would do? I think they want the authorization to happen upon accepting/clicking the "OK" button in the dialog button box but before the dialog gets accepted. Then they verify the data and only accept the overall dialog if that has succeeded. I think that is why they do not attach QDialogButtonBox::accepted to QDialog::accept?

                  S 1 Reply Last reply
                  0
                  • JonBJ JonB

                    @SimonSchroeder
                    Ah, I think I understand you now. I haven't used a QDialogButtonBox. You don't mind the QDialogButtonBox::accepted signal having a slot, but you would expect that to accept the dialog and then the dialog's accepted to do the action, right? Like

                    connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept);
                    connect(this, &QDialog::accepted, this, &AuthorizationView::SendInfo);
                    

                    Is this what you had in mind?

                    But I think there is a wrinkle. The OP's question is "Don't close the window when clicking "OK" QDialog", which the above would do? I think they want the authorization to happen upon accepting/clicking the "OK" button in the dialog button box but before the dialog gets accepted. Then they verify the data and only accept the overall dialog if that has succeeded. I think that is why they do not attach QDialogButtonBox::accepted to QDialog::accept?

                    S Offline
                    S Offline
                    SimonSchroeder
                    wrote on last edited by
                    #17

                    @JonB I'm not saying you should connect those (certainly not if you don't want the dialog to close upon clicking 'OK'). I was saying that either there is some auto-connect because of the ui-file (which I don't know) or somewhere in the code the dialog is closed on purpose. If the OP thinks he's not closing the dialog himself on purpose, then the auto-connect would be one of my guesses to check.

                    JonBJ 1 Reply Last reply
                    0
                    • S SimonSchroeder

                      @JonB I'm not saying you should connect those (certainly not if you don't want the dialog to close upon clicking 'OK'). I was saying that either there is some auto-connect because of the ui-file (which I don't know) or somewhere in the code the dialog is closed on purpose. If the OP thinks he's not closing the dialog himself on purpose, then the auto-connect would be one of my guesses to check.

                      JonBJ Offline
                      JonBJ Offline
                      JonB
                      wrote on last edited by JonB
                      #18

                      @SimonSchroeder said in Don't close the window when clicking "OK" QDialog:

                      or somewhere in the code the dialog is closed on purpose. If the OP thinks he's not closing the dialog himself on purpose

                      In the OP's void AuthorizationView::ResultAuthorization(bool result) he has

                          if (result) {
                              this->close();
                      

                      His code emits a signal with the name & password, the authorizer presumably calls above method with success/failure parameter for authorization. If success it closes the dialog, but if failure it puts up a message box but stays inside the dialog, presumably for the user to try again. That is why the button box's "OK"/accepted should not be connected directly and unconditionally to the dialog's accepted.

                      1 Reply Last reply
                      1

                      • Login

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