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.
  • I Idodoqdo

    @jsulm I want that when I click "OK", the login and password are sent, the server returns the result and depending on this: either an error message is displayed and the window does not close, or the window closes

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

    @Idodoqdo All that can be done with my suggestion

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

    I 1 Reply Last reply
    0
    • jsulmJ jsulm

      @Idodoqdo All that can be done with my suggestion

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

      @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 1 Reply Last reply
      1
      • 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 Extensions
                                • Unsolved