警告

本节包含自动从 C++ 翻译成 Python 的代码片段,可能包含错误。

行编辑示例#

行编辑示例展示了 QLineEdit 的多种用法,并显示了各种属性和验证器对用户输入和输出效果的影响。

../_images/lineedits-example.png

示例由一个单独的 Window 类组成,包含不同输入约束和显示属性的行编辑选择,可以通过从组合框中选择项目来更改这些属性。将这些内容一起展示有助于开发者选择合适的属性来与行编辑一起使用,并便于比较每个验证器对用户输入的影响。

窗口类定义#

Window 类继承了 QWidget,并包含一个构造函数和几个槽

class Window(QWidget):

    Q_OBJECT
# public
    Window(QWidget parent = None)
# public slots
    def echoChanged(int):
    def validatorChanged(int):
    def alignmentChanged(int):
    def inputMaskChanged(int):
    def accessChanged(int):
# private
    echoLineEdit = QLineEdit()
    validatorLineEdit = QLineEdit()
    alignmentLineEdit = QLineEdit()
    inputMaskLineEdit = QLineEdit()
    accessLineEdit = QLineEdit()

这些槽用于在组合框中选中新的验证器时,更新特定行编辑使用的验证器类型。行编辑存储在窗口中以供这些槽使用。

窗口类实现#

使用 Window 构造函数来设置行编辑、验证器和组合框,将组合框的信号连接到 Window 类的槽,并排列布局中的子小部件。

首先,我们构建一个 group box 来包含一个标签、组合框和行编辑,以便展示 echoMode 属性。

def __init__(self, parent):
    super().__init__(parent)

    echoGroup = QGroupBox(tr("Echo"))
    echoLabel = QLabel(tr("Mode:"))
    echoComboBox = QComboBox()
    echoComboBox.addItem(tr("Normal"))
    echoComboBox.addItem(tr("Password"))
    echoComboBox.addItem(tr("PasswordEchoOnEdit"))
    echoComboBox.addItem(tr("No Echo"))
    echoLineEdit = QLineEdit()
    echoLineEdit.setPlaceholderText("Placeholder Text")
    echoLineEdit.setFocus()

到目前为止,这些小部件还没有在布局中进行排列。最终,echoLabelechoComboBoxechoLineEdit 将被放置在 echoGroup 组合框内的垂直布局中。

类似地,我们构建组合框和小组件集合来展示 QIntValidatorQDoubleValidator 对行编辑内容的影响。

validatorGroup = QGroupBox(tr("Validator"))
validatorLabel = QLabel(tr("Type:"))
validatorComboBox = QComboBox()
validatorComboBox.addItem(tr("No validator"))
validatorComboBox.addItem(tr("Integer validator"))
validatorComboBox.addItem(tr("Double validator"))
validatorLineEdit = QLineEdit()
validatorLineEdit.setPlaceholderText("Placeholder Text")

文本对齐通过另一组小部件进行演示。

alignmentGroup = QGroupBox(tr("Alignment"))
alignmentLabel = QLabel(tr("Type:"))
alignmentComboBox = QComboBox()
alignmentComboBox.addItem(tr("Left"))
alignmentComboBox.addItem(tr("Centered"))
alignmentComboBox.addItem(tr("Right"))
alignmentLineEdit = QLineEdit()
alignmentLineEdit.setPlaceholderText("Placeholder Text")

QLineEdit 支持使用 inputMask