0

好吧,这让我发疯了。我确定这是微不足道的,但是我一直在寻找答案并没有看到它。我敢肯定,这将是一个平坦的额头。

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

  • QLineEdit(不能为空)
  • QPlainText编辑
  • 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

麦克风

4

3 回答 3

1

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

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

于 2009-10-20T19:00:09.120 回答
0

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

这样做的另一种方法是覆盖接受函数并在那里进行检查,并且只有在一切都有效时才调用父级的接受函数。

于 2009-09-28T19:17:56.790 回答
0

也许设置一个输入掩码?

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

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

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

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

于 2009-10-20T18:51:34.783 回答