Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt
  • Unsolved
Collapse
qtws26_logo

The Qt Event of the Year: Qt World Summit 2026

Save Your Spot >
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Don't close the window when clicking "OK" QDialog
Qt 6.12 LTS is out! See what's new in the release blog

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

Scheduled Pinned Locked Moved Solved General and Desktop
18 Posts 4 Posters 7.9k 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.
  • I Idodoqdo

    @jsulm this help me

    #include "authorizationview.h"
    #include "qmessagebox.h"
    #include "ui_authorizationview.h"
    
    AuthorizationView::AuthorizationView(QWidget *parent) :
        QDialog(parent),
        ui(new Ui::AuthorizationView)
    {
        ui->setupUi(this);
        connect(ui->buttonBox, SIGNAL(accepted()), this, SLOT(SendInfo()));
    }
    
    AuthorizationView::~AuthorizationView()
    {
        delete ui;
    }
    
    void AuthorizationView::ResultAuthorization(bool result)
    {
        if (result) {
            this->close();
        } else {
            QMessageBox::information(this, "Result Authorization", "Incorrect login or password");
        }
    }
    
    void AuthorizationView::SendInfo()
    {
        emit InfoAuth(qMakePair(ui->login->text(), ui->password->text()));
    }
    
    void AuthorizationView::accept()
    {
        setResult(QDialog::Accepted);
    }
    

    Thx

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

    @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 3 Replies 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
      #7

      @JonB
      491ed691-f779-40d1-999b-27625848d5d6-image.png
      and what is the new way to connect?

      jsulmJ 1 Reply Last reply
      0
      • I Idodoqdo

        @JonB
        491ed691-f779-40d1-999b-27625848d5d6-image.png
        and what is the new way to connect?

        jsulmJ Offline
        jsulmJ Offline
        jsulm
        Lifetime Qt Champion
        wrote on last edited by
        #8

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

        and what is the new way to connect?

        https://doc.qt.io/qt-6/signalsandslots.html

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

        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
          #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
                            • Unsolved