Qt入门系列开发教程【基础控件篇】QLineEdit输入框

举报
鱼酱 发表于 2022/02/25 08:49:31 2022/02/25
【摘要】 描述QLineEdit允许用户使用一组有用的编辑功能输入和编辑单行纯文本,包括撤消和重做、剪切和粘贴以及拖放(参见 setDragEnabled())。通过更改行编辑的 echoMode(),它也可以用作“只写”字段,用于密码等输入。文本的长度可以限制为 maxLength()。可以使用 validator() 或 inputMask() 或两者来任意限制文本。在同一行编辑中在验证器和输入...

描述

在这里插入图片描述

QLineEdit允许用户使用一组有用的编辑功能输入和编辑单行纯文本,包括撤消和重做、剪切和粘贴以及拖放(参见 setDragEnabled())。
通过更改行编辑的 echoMode(),它也可以用作“只写”字段,用于密码等输入。
文本的长度可以限制为 maxLength()。可以使用 validator() 或 inputMask() 或两者来任意限制文本。在同一行编辑中在验证器和输入掩码之间切换时,最好清除验证器或输入掩码以防止未定义的行为。
一个相关的类是 QTextEdit,它允许多行、富文本编辑。
您可以使用 setText() 或 insert() 更改文本。使用 text() 检索文本;使用 displayText() 检索显示的文本(可能不同,请参阅 EchoMode)。可以使用 setSelection() 或 selectAll() 选择文本,并且可以使用 cut()、copy()ied 和 paste()d 进行选择。文本可以使用 setAlignment() 对齐。
当文本更改时,会发出 textChanged() 信号;当文本发生变化而不是通过调用 setText() 时,会发出 textEdited() 信号;当光标移动时,会发出 cursorPositionChanged() 信号;当按下 Return 或 Enter 键时,会发出 returnPressed() 信号。
编辑完成后,无论是因为行编辑失去焦点还是按下 Return/Enter,都会发出 editingFinished() 信号。请注意,如果在没有进行任何更改的情况下失去焦点,则不会发出 editingFinished() 信号。
请注意,如果在行编辑上设置了验证器,则仅当验证器返回 QValidator::Acceptable 时才会发出 returnPressed()/editingFinished() 信号。
默认情况下,QLineEdits 有一个由平台样式指南指定的框架;您可以通过调用 setFrame(false) 将其关闭。
默认键绑定如下所述。行编辑还提供了一个上下文菜单(通常通过鼠标右键单击来调用),其中显示了其中一些编辑选项。

  • Left Arrow 将光标向左移动一个字符。
  • Shift+Left Arrow 向左移动并选择文本一个字符。
  • Right Arrow 将光标向右移动一个字符。
  • Shift+Right Arrow 向右移动并选择一个字符的文本。
  • Home 将光标移动到行首。
  • End 将光标移动到行尾。
  • Backspace 删除光标左侧的字符。
  • Ctrl+Backspace 删除光标左侧的单词。
  • Delete 删除光标右侧的字符。
  • Ctrl+Delete删除光标右侧的单词。
  • Ctrl+A全选。
  • Ctrl+C 将所选文本复制到剪贴板。
  • Ctrl+Insert 将选定的文本复制到剪贴板。
  • Ctrl+KD 删除到行尾。
  • Ctrl+VP 将剪贴板文本粘贴到行编辑中。
  • Shift+Insert 将剪贴板文本粘贴到行编辑中。
  • Ctrl+X 删除选定文本并将其复制到剪贴板。
  • Shift+Delete删除选定的文本并将其复制到剪贴板。
  • Ctrl+Z 撤消上一个操作。 Ctrl+Y 重做上次撤消的操作。

代表有效字符的任何其他键序列将导致该字符被插入到行编辑中。

属性列表

  • acceptableInput : const bool
    该属性保存输入是否满足 inputMask 和验证器。
    默认情况下,此属性为 true。
  • alignment : Qt::Alignment
    此属性保存行编辑的对齐方式。
    这里允许水平和垂直对齐,Qt::AlignJustify 将映射到 Qt::AlignLeft。
    默认情况下,该属性包含 Qt::AlignLeft 和 Qt::AlignVCenter 的组合。
  • clearButtonEnabled : bool
    此属性保存行编辑是否在非空时显示清除按钮。
    如果启用,行编辑会在包含一些文本时显示尾部清除按钮,否则行编辑不会显示清除按钮(默认设置)。
  • cursorMoveStyle : Qt::CursorMoveStyle
    该属性保存该行编辑中光标的移动方式。
    当此属性设置为 Qt::VisualMoveStyle 时,行编辑将使用视觉移动样式。 无论文本的书写方向如何,按向左箭头键总是会导致光标向左移动。 相同的行为适用于右箭头键。
    当属性为 Qt::LogicalMoveStyle(默认)时,在 LTR 文本块内,按左箭头键时增加光标位置,按右箭头键时减少光标位置。 如果文本块从右到左,则应用相反的行为。
  • cursorPosition : int
    此属性保存此行编辑的当前光标位置。
    在适当的时候设置光标位置会导致重绘。
    默认情况下,此属性包含值 0。
  • displayText : const QString
    此属性保存显示的文本。
    如果 echoMode 为 Normal,则返回与 text() 相同的值; 如果 EchoMode 是 Password 或 PasswordEchoOnEdit 它返回一个平台相关的密码掩码字符串 text().length() 大小,例如 “******”; 如果 EchoMode 为 NoEcho,则返回一个空字符串“”。
    默认情况下,此属性包含一个空字符串。
  • dragEnabled : bool
    如果用户在某些选定文本上按下并移动鼠标,此属性保存 lineedit 是否开始拖动。
    默认情况下禁用拖动。
  • echoMode : EchoMode
    此属性保存行编辑的回显模式。
    回显模式确定在行编辑中输入的文本如何显示(或回显)给用户。
    最常见的设置是 Normal,其中用户输入的文本逐字显示,但 QLineEdit 也支持允许输入文本被抑制或隐藏的模式:这些模式包括 NoEcho、Password 和 PasswordEchoOnEdit。
    小部件的显示以及复制或拖动文本的能力受此设置的影响。
    默认情况下,此属性设置为 Normal。
  • frame : bool
    此属性保存线编辑是否使用框架绘制自身。
    如果启用(默认),线编辑会在框架内自行绘制,否则线编辑会在没有任何框架的情况下自行绘制。
  • hasSelectedText : const bool
    该属性保存是否有任何文本被选中。
    如果用户选择了部分或全部文本,则 hasSelectedText() 返回 true; 否则返回假。
    默认情况下,此属性为 false。
  • inputMask : QString
    此属性保存验证输入掩码。
    如果未设置掩码,则 inputMask() 返回一个空字符串。
    设置 QLineEdit 的验证掩码。 验证器可以代替掩码使用,也可以与掩码结合使用; 请参阅 setValidator()。
    通过传递一个空字符串 ("") 取消设置掩码并返回到正常的 QLineEdit 操作。
A: 需要 Letter 类别的字符,例如 A-Z、a-z。
a: 允许但不是必需的字母类别的字符。
N: 需要字母或数字类别的 N 个字符,例如 A-Z、a-z、0-9。
n:字母或数字类别的 ncharacter 允许但不是必需的。
X:需要任何非空白字符。
x:允许但不是必需的任何非空白字符。
9:需要数字类别的 9 个字符,例如 0-90:数字类别的 0 字符允许但不是必需的。
D:数字类别且大于零的字符,如1-9
d:数字类别的字符,允许但不要求大于零,例如 1-9。
#:数字类别的#character,或加号/减号允许但不是必需的。
H:需要十六进制字符。 AFAF0-9。
h :允许但不是必需的十六进制字符。
B: 需要二进制字符。 0-1。
b :允许但不是必需的二进制字符。
>   :元字符含义>所有以下字母字符都是大写的。
<:所有后面的字母字符都是小写的。
!:关闭大小写转换。
;c :终止输入掩码并将空白字符设置为 c。
[ ] { }:预订的。
\: 使用 \ 转义上面列出的特殊字符以将它们用作分隔符。 

创建或清除时,行编辑将填充输入掩码字符串的副本,其中元字符已被删除,掩码字符已替换为空白字符(默认情况下,空格)。
设置输入掩码后, text() 方法返回行编辑内容的修改副本,其中所有空白字符均已删除。 可以使用 displayText() 读取未修改的内容。
如果行编辑的当前内容不满足输入掩码的要求,则 hasAcceptableInput() 方法返回 false。

  • [ ] 000.000.000.000是_IP地址; 空格是_。

  • [ ] HH:HH:HH:HH:HH:HH是_MAC 地址

  • [ ] 0000-00-00 是ISO 日期; 空格是空格

  • [ ] AAAAA-AAAAA-AAAAA-AAAAA-AAAAA是许可证号; 空格是#,所有(字母)字符都转换为大写。

  • maxLength : int
    最大长度

  • modified : bool
    该属性保存行编辑的内容是否已被用户修改。
    QLineEdit 永远不会读取修改后的标志; 它的默认值为 false 并且在用户更改行编辑的内容时更改为 true。
    这对于需要提供默认值但一开始不知道默认值应该是什么的事情很有用(也许它取决于表单上的其他字段)。 在没有最佳默认值的情况下开始行编辑,当知道默认值时,如果 modified() 返回 false(用户没有输入任何文本),则插入默认值。
    调用 setText() 将修改后的标志重置为 false

  • placeholderText : QString
    此属性保存行编辑的占位符文本。
    只要行编辑为空,设置此属性会使行编辑显示为灰色的占位符文本。
    通常,空行编辑会显示占位符文本,即使它具有焦点。 但是,如果内容水平居中,则当行编辑具有焦点时,占位符文本不会显示在光标下。
    默认情况下,此属性包含一个空字符串。

  • readOnly : bool
    此属性保存行编辑是否为只读。
    在只读模式下,用户仍然可以将文本复制到剪贴板,或者拖放文本(如果 echoMode() 为 Normal),但不能对其进行编辑。
    QLineEdit 在只读模式下不显示光标。
    默认情况下,此属性为 false。

  • redoAvailable : const bool
    该属性保存重做是否可用。
    一旦用户对行编辑中的文本执行了一个或多个撤消操作,重做就可用。
    默认情况下,此属性为 false。
    -selectedText : const QString
    此属性保存选定的文本。
    如果没有选定文本,则此属性的值为空字符串。
    默认情况下,此属性包含一个空字符串。
    -text : QString
    此属性保存行编辑的文本。
    设置此属性会清除选择,清除撤消/重做历史,将光标移动到行尾并将修改后的属性重置为 false。 使用 setText() 插入文本时不会验证文本。
    文本被截断为 maxLength() 长度。
    默认情况下,此属性包含一个空字符串。

  • undoAvailable : const bool
    此属性保存撤消是否可用。
    一旦用户修改了行编辑中的文本,撤消就可用。
    默认情况下,此属性为 false。

共有函数

 //添加action
 void addAction(QAction *action, QLineEdit::ActionPosition position)
  //添加图标
 QAction *addAction(const QIcon &icon, QLineEdit::ActionPosition position)
  //文本对齐方式
 Qt::Alignment alignment() const
 // 如果未选择文本,则删除文本光标左侧的字符并将光标向左移动一位。 如果选择了任何文本,则光标将移动到所选文本的开头并删除所选文本。
 void backspace()
  //获取QCompleter 对象
 QCompleter *completer() const
  //创建上下文menu
 QMenu *createStandardContextMenu()
  //将光标向后移动一步字符。 如果标记为真,则每个移过的字符都将添加到选择中; 如果标记为假,则清除选择。
 void cursorBackward(bool mark, int steps = 1)
 void cursorForward(bool mark, int steps = 1)
 // 获取光标移动方式
 Qt::CursorMoveStyle cursorMoveStyle() const
 //当前光标位置
 int cursorPosition() const
  //光标移动到某一点
 int cursorPositionAt(const QPoint &pos)
 // 将光标向后移动一步字符。 如果标记为真,则每个移过的字符都将添加到选择中; 如果标记为假,则清除选择。 ...
 void cursorWordBackward(bool mark)
 void cursorWordForward(bool mark)
 // 如果未选择文本,则删除文本光标右侧的字符。 如果选择了任何文本,则光标将移动到所选文本的开头并删除所选文本。
 void del()
  //删除选中
 void deselect()
 // 展示的文本
 QString displayText() const
 // 如果用户在某些选定文本上按下并移动鼠标,此属性保存 lineedit 是否开始拖动。
 bool dragEnabled() const
  //显示模式
 QLineEdit::EchoMode echoMode() const
 // 将文本光标移动到行尾,除非它已经存在。 如果 mark 为真,则选择最后一个位置的文本; 否则,如果移动光标,则取消选择任何选定的文本。
 void end(bool mark)
  //该属性保存输入是否满足当前验证 
 bool hasAcceptableInput() const
  //是否有边框
 bool hasFrame() const
 // 是否有选中的文本
 bool hasSelectedText() const
 // 将文本光标移动到行首,除非它已经存在。 如果标记为真,则选择文本朝向第一个位置; 否则,如果移动光标,则取消选择任何选定的文本。
 void home(bool mark)

 //获取掩码
 QString inputMask() const
 //插入新文本
 void insert(const QString &newText)
 //是否有清除按钮
 bool isClearButtonEnabled() const
  //可修改
 bool isModified() const
  //是否只读
 bool isReadOnly() const
 // 是否可重做
 bool isRedoAvailable() const
 // 保存撤销是否可用
 bool isUndoAvailable() const
 // 最大长度
 int maxLength() const
 // 包含占位符的文本
 QString placeholderText() const
 // 选中的文本
 QString selectedText() const
 //选择结尾处
 int selectionEnd() const
 //选择长度
 int selectionLength() const
  //选择开始处
 int selectionStart() const
  //文本方向
 void setAlignment(Qt::Alignment flag)
  //开启清空按钮
 void setClearButtonEnabled(bool enable)
 // 完成面膜是
 void setCompleter(QCompleter *c)
  //光标移动样式
 void setCursorMoveStyle(Qt::CursorMoveStyle style)
  //当前光标位置
 void setCursorPosition(int)
 // 如果用户在某些选定文本上按下并移动鼠标,此属性保存 lineedit 是否开始拖动。
 void setDragEnabled(bool b)
 //设置输入模式
 void setEchoMode(QLineEdit::EchoMode)
 //设置边框
 void setFrame(bool)
 //设置掩码
 void setInputMask(const QString &inputMask)
 //最大长度
 void setMaxLength(int)
 // 是否被修改
 void setModified(bool)
 //设置文本(包含占位符)
 void setPlaceholderText(const QString &)
 //设置只读
 void setReadOnly(bool)
  //设置选中
 void setSelection(int start, int length)
 //设置margin
 void setTextMargins(int left, int top, int right, int bottom)
 //设置margin
 void setTextMargins(const QMargins &margins)
 //设置正则对象
 void setValidator(const QValidator *v)
//获取文本
 QString text() const
 //获取margin
 QMargins textMargins() const
 //获取正则对象
 const QValidator *validator() const

公有槽

清除文本
 void clear()
 拷贝到剪切板
 void copy() const
剪切
 void cut()
 复制
 void paste()
 撤销
 void redo()
 全选
 void selectAll()
 设置文本
 void setText(const QString &)
 如果撤消可用,则撤消最后一个操作。 取消选择任何当前选择,并将选择开始更新到当前光标位置。
 void undo()

信号

 //光标改变
 void cursorPositionChanged(int oldPos, int newPos)
  //当按下 Return 或 Enter 键时,或者如果行编辑失去焦点并且自上次发出此信号以来其内容已更改,则会发出此信号。
 //请注意,如果在行编辑上设置了 validator() 或 inputMask() 并按下了 enter/return,则仅当输入遵循 inputMask() 并且 validator() 返回 QValidator 时才 //会发出 editingFinished() 信号: : 可以接受。
 void editingFinished()
 // 当用户按下不被认为是可接受输入的键时,会发出此信号。 例如,如果按键导致验证器的 validate() 调用返回 Invalid。 另一种情况是尝试输入超出行 //编辑最大长度的更多字符。
 //注意:在部分文本被接受但不是全部被接受的情况下,仍然会发出此信号。 例如,如果设置了最大长度,并且剪贴板文本在粘贴时比最大长度长。
 void inputRejected()
 // 该信号在按下 Return 或 Enter 键时发出。 请注意,如果在行编辑上设置了 validator() 或 inputMask(),则仅当输入跟随 inputMask() 并且 validator()  //返回 QValidator::Acceptable 时才会发出 returnPressed() 信号。
 void returnPressed()
 // 选择的文本变化
 void selectionChanged()
 //每当文本更改时都会发出此信号。 text 参数是新文本。
 //与 textEdited() 不同,此信号也会在以编程方式更改文本时发出,例如,通过调用 setText()。
 void textChanged(const QString &text)
 // 每当编辑文本时都会发出此信号。 text 参数是新文本。
 //与 textChanged() 不同,当以编程方式更改文本时不会发出此信号,例如,通过调用 setText()。
 void textEdited(const QString &text)
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。