在将可编辑的 QCombobox 输入添加到 QCombobox 之前,我尝试验证它是否是目录。
from PySide import QtGui, QtCore
class DirValidator(QtGui.QValidator):
def __init__(self, cb_input):
super(DirValidator, self).__init__()
self._input = cb_input
def validate(self, _text, _pos):
_dir = QtCore.QDir(_text)
if self._input.hasFocus(): # ignore validation while editing not complete
return QtGui.QValidator.Acceptable
if QtCore.QDir.exists(_dir):
return QtGui.QValidator.Acceptable
return QtGui.QValidator.Invalid
dir_validator = DirValidator(self.cb_path.lineEdit())
self.cb_path.setValidator(dir_validator)
遗憾的是,它不能正常工作,因为当我按 Enter 时,每个输入仍会添加到组合框中。有什么建议么?
编辑:我也尝试在 QLineEdit 上使用验证器,如下所示:
dir_validator = DirValidator(self.cb_path.lineEdit())
self.cb_path.lineEdit().setValidator(dir_validator)
也不行。
编辑:它有点工作......但是当我按下返回时“hasFocus”仍然是True,所以它只是接受输入,然后当然将它添加到组合框中。如果我去掉“if self._input.hasFocus():”如果我输入它不接受任何输入......只要粘贴一个完整的目录路径。所以我需要一种检查编辑是否完成然后检查它是否是目录的方法。据我了解,我只能通过 QValidator 在组合框中检查它......因为它会立即将输入添加到框中......在我可以以任何方式拦截它之前。
编辑:我确实为我的情况找到了解决方案。我只是放弃了整个验证器方法。这样做的目的是防止组合框在没有有效目录的情况下创建新项目......我现在所做的是在完成后通过利用 QLineEdit().editingFinished() 信号来验证输入. 创建新项目后,如果输入无效,我将再次删除它,并且它还让我有机会添加一个错误弹出窗口,告诉用户输入不是目录。