Seite 1 von 1

QDialog mit Buttonbox-Event Accept schließen

Verfasst: Mittwoch 9. September 2020, 16:48
von nieselfriem
Hallo,

ich habe mit QT-Designer mir einen Dialog gebaut. Dort habe ich eine Buttonbox mit den Standartbutton OK und Close engefügt. Nun möchte ich gerne, dass auch drücken des Buttons das Speichern der Daten ausgelöst wird und ein Hinweisdialog quasi Fragt. "Möchtest du die Daten speichern und den Dialog beenden? Ja/Nein". So weit so gut. Nur finde ich leider keine möglichkeit ein event auszuläsen, dass den Dialog beendet.

Mein Dilaog wird wie folgt geöffnet:

Code: Alles auswählen

    def open_customer_order_dialog(self):
        cust_new_prod_order_dialog = QtWidgets.QDialog()
        self.cust_new_prod_order_dialog.setupUi(cust_new_prod_order_dialog)
        new_prod_order = CustomerOrderOperations(
            self.cust_new_prod_order_dialog, self.__customer_number) #Klasse mit allen Operationen die für den Dialog relevant sind
        cust_new_prod_order_dialog.exec_()
        # Aktualsierung der Bestelltabelle nach schliessen des Dialoges
        self.render_customer_order_table()

Code: Alles auswählen

class CustomerOrderOperations:
    def __init__(self, dialog, customer_id=0):
        self.msbx = MessageBoxes()
        self.dialog = dialog
        ...
        init_button_box()
        
        
     def init_button_box(self):
        self.__buttonBox.button(QtWidgets.QDialogButtonBox.Ok).setEnabled(False)
        self.__buttonBox.button(QtWidgets.QDialogButtonBox.Ok).clicked.connect(self.create_customer_order)   
        
        
     def create_customer_order(self):
        ret = self.__msbx.info_box("Sollen die Kundendaten jetzt gespeichert werden?", "YESNO")
        if ret == QMessageBox.Yes:
            do = DatabaseOperations()
            dpop_return = do.insert_customer_order(self.__customer_id, self.cart_engine.get_warenkorb(), self.order_sum,
                                                   self.calc_summery_sum(), self.shipping,
                                                   self.__order_date_ed.date().toPyDate())

            if dpop_return != 0:
                self.__msbx.show_database_error_msg_bx(dpop_return)
            else:
                self.__msbx.show_message_data_saved_msg_bx()
            self.dialog.close() # Das wäre super wenn das gehen würde
Wie kann ich den Dialog nach dem bestätigen des Speicherns schließen lassen?

VG niesel

Re: QDialog mit Buttonbox-Event Accept schließen

Verfasst: Mittwoch 9. September 2020, 18:38
von __deets__
Man soll exec nicht mehr verwenden. Sondern Open. Und es gibt ein finished Signal.

https://doc.qt.io/qt-5/qdialog.html#finished

Re: QDialog mit Buttonbox-Event Accept schließen

Verfasst: Mittwoch 9. September 2020, 19:42
von nieselfriem
Gibts es dazu ein paar beispiele?

Alles was ich zu QDialog finde (außer in der original Doku) ist im PyQT-Kontext mit exec_()

Re: QDialog mit Buttonbox-Event Accept schließen

Verfasst: Mittwoch 9. September 2020, 19:47
von __deets__
Wie immer gilt bei Qt: C++ hat mehr und bessere Beispiele. An denen solltest du dich orientieren.