PyQt5 QDateEdit()撤消

时间:2018-03-21 11:20:55

标签: python qt pyqt pyqt5

在酒店预订系统中,我有几个QDateEdit字段映射到我表单中的数据库记录。用户更新任何这些字段后,程序会进行检查以确保房间可用。如果房间不可用,我想将QDateEdit恢复到原始值,并让用户知道QMessageBox。

QLineEdit有一个undo方法,可以按我的意思运行。

此外,如果我尝试通过从模型中提取信息来重置QDateEdit,它会再次触发dateChanged信号。这不是一个大问题,因为我知道原始值是有效的,但对我来说似乎很浪费。

如何在不生成dateChanged信号的情况下撤消对QDateEdit的更改?

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class Guest_form(QDialog):
    def __init__(self, parent=None):
        QDialog.__init__(self)
        self.date_good = True

        self.date_edit = QDateEdit()
        self.line_edit = QLineEdit()
        layout = QVBoxLayout()
        layout.addWidget(self.date_edit)
        layout.addWidget(self.line_edit)
        self.setLayout(layout)
        self.date_edit.setFocus()

        self.date_edit.dateChanged.connect(self.check_date)
        self.line_edit.editingFinished.connect(self.check_date)

    def check_date(self):
        self.line_edit.setText(self.date_edit.date().toString())
        self.date_good = False
        #self.date_edit.undo()  #How?
        self.date_edit.setDate(QDate.currentDate())
        self.line_edit.undo()
        print('here')

if __name__=="__main__":
    app=QApplication(sys.argv)
    myapp = Guest_form()
    myapp.show()
    sys.exit(app.exec_())

1 个答案:

答案 0 :(得分:1)

您可以使用Qt的撤消/重做框架。你可以找到一个很好的介绍here.