PyQt4 QDialog - 要求字段不为空

时间:2009-09-26 18:01:48

标签: algorithm qt qt4 pyqt4

好的,这让我疯了。我确定这是微不足道的,但我一直在寻找答案,但是没有看到它。我相信它会是一个扁平的额头。

我正在用Python设计一个Qt4对话框。我通过QDesigner生成代码,并在系统上有4个输入:

  • QLineEdit(不能为空)
  • QPlainTextEdit
  • QLineEdit(不能为空)
  • QComboBox(需要选择其中一个选项)

问题:是否有标志使字段“必需”?强迫它是非空白的?

我试图使用QRegExpValidator,但不确定这是对的:

    regex = QRegExp(r"\\S+")        
    self.optionName.setValidator(QRegExpValidator(regex,self))

我知道我遗漏了一些明显的东西(请不要让它成为self.optionName.setRequired()函数)。

更新

我现在已经添加了这个类:

from PyQt4 import QtGui

class ValidStringLength(QtGui.QValidator):
    def __init__(self, min, max, parent):
        QtGui.QValidator.__init__(self, parent)

        self.min = min
        self.max = max

    def validate(self, s, pos):
        if self.max > -1 and len(s) > self.max:
            return (QValidator.Invalid, pos)

        if self.min > -1 and len(s) < self.min:
            return (QValidator.Intermediate, pos)

        return (QValidator.Acceptable, pos)

    def fixup(self, s):
        pass

这样称呼:

    self.optionName.setValidator(ValidStringLength(2, 8, self.optionName))
    self.criteriaName.setValidator(ValidStringLength(2, 8, self.criteriaName))

并在类的validate()函数中设置断点,但永远不会调用它。

我错过了一些基本的东西吗?

TIA

麦克

3 个答案:

答案 0 :(得分:0)

我对验证器了解不多,或者为什么它们不会被触发。但是,如果我试图做这样的事情,我会在我的对话框中创建一个验证槽,当任何所需的项目发生变化时,它会被调用。在那个插槽中,我会检查项目的状态,并根据每个项目的有效性启用/禁用接受按钮。我还会尝试做一些事情来表示无效的项目,例如用红色勾勒出来。

另一种方法是覆盖accept函数并在那里进行检查,如果一切都有效,则只调用parent的accept函数。

答案 1 :(得分:0)

也许设置一个输入掩码?

http://doc.trolltech.com/4.4/qlineedit.html#inputMask-prop

如果行编辑中的输入不遵循输入掩码,则“hasAcceptableInput()”将返回false。

http://doc.trolltech.com/4.4/qlineedit.html#acceptableInput-prop

您也可以将它们与验证器结合使用。

答案 2 :(得分:0)

不确定是否可以这样做,因为默认值为空。即lineedit从一开始就是无效的,它永远不应该是。只是一种预感。

无论如何,既然你想在你的按钮之间进行协调,那么在每个数据发生变化时写一些检查全局状态的东西是不是更容易,并且在全局状态可以接受之前启用/禁用ok按钮?