在酒店预订系统中,我有两个QDateEdit字段映射到我表单中的数据库记录。在用户更新这些字段后,程序将进行检查以确保房间可用。如果没有可用的房间,我希望将QDateEdit恢复到它的原始值,并使用QMessageBox让用户知道。
QLineEdit有一个撤销方法,它可以按照我的意愿工作。
此外,如果我试图通过从模型中提取信息来重置QDateEdit,它将再次触发dateChanged信号。这不是一个大问题,因为我知道原来的价值是有效的,但似乎浪费了我。
如何在不产生QDateEdit信号的情况下撤销对dateChanged的更改?
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_())发布于 2018-03-21 11:28:57
您可以使用Qt的撤销/重做框架。你可以找到一个很好的介绍这里。
https://stackoverflow.com/questions/49404977
复制相似问题