1、 QLineEdit 类是 QWidget 类的直接子类,该类实现了一个单行的输入部件,即行编辑器;
2、验证器(QValidator 类)和输入掩码简介:主要作用是验证用户输入的字符是否符合验证器
的要求,即限制对用户的输入,比如仅能输入数字而不能输入字母等。
3、行编辑器默认支持复制、剪切、粘贴等常用操作,还支持一些常用的快捷键(比如 Ctrl+C
等)和鼠标右键的上下文菜单。 下表为默认支持的键盘快捷键
默认支持的快捷键 | |||
按键 | 说明 | 按键 | 说明 |
左箭头 | 使光标向左移动一个字符 | Ctrl+A | 全选 |
Shift+左箭头 | 向左移动并选择一个字符 | Ctrl+C | 复制 |
右箭头 | 使光标向右移动一个字符 | Ctrl+Insert | 复制 |
Shift+右箭头 | 向右移动并选择一个字符 | Ctrl+K | 删除到行尾 |
Home | 将光标移至行的开头 | Ctrl+V | 粘贴 |
End | 将光标移至行尾 | Shift+Insert | 粘贴 |
Backspace | 删除光标左侧的字符 | Ctrl+X | 剪切 |
Ctrl+Backspace | 删除光标左侧的一个单词 | Shift+Delete | 剪切(即删除并复制) |
Delete | 删除光标右侧的字符 | Ctrl+Z | 撤消最后的操作 |
Ctrl+Delete | 删除光标右侧的一个单词 | Ctrl+Y | 重做最后的操作 |
4、 QLineEdit 类中的属性
QLineEdit 类(行编辑器)属性速查表 | |||
属性名 | 说明 | 属性名 | 说明 |
inputMask | 设置输入掩码 | acceptableInput | 是否符合掩码和验证的要求 |
alignment | 对齐方式 | maxLength | 文本最大长度 |
clearButtonEnabled | 是否显示清除按钮 | modified | 内容是否被修改 |
cursorMoveStyle | 文字光标移动的方式 | placeholderText | 是否显示占位符文本(提示信息)。例如当用户未选中输入框时,输入框中显示“请输入…”,而用户选中输入框时,“请输入…” 随之消失。 |
cursorPosition | 文字光标的位置 | readOnly | 是否启用只读模式 |
displayText | 获取回显的文本 | redoAvailable | 描述重做是否已启用 |
dragEnabled | 是否启用拖放 | text | 获取和设置文本 |
echoMode | 回显模式。 设定输入框中文本的显示样式,该属性的可选值有以下几个: QLineEdit::Normal:正常显示所输入的字符,此为默认选项。 QLineEdit::NoEcho:不显示任何输入的字符,常用于密码类型的输入,且长度保密。 QLineEdit::Password:显示与平台相关的密码掩饰字符,而不是实际输入的字符。当用户重新点击输入框时,可以紧接着之前的文本继续输入。 QLineEdit::PasswordEchoOnEdit:编辑时正常显示输入的字符,编辑完成后改为用密码掩饰字符显示。当用户重新点击输入框时,不能紧接着之前的文本继续输入。 |
undoAvailable | 描述撤消是否已启用。 |
frame | 是否绘制边框 | selectedText | 获取选中的文本,设置需使用函 数 setSelection() |
hasSelectedText | 是否有文本被选中 |
①、 acceptableInput: const bool 访问函数: bool hasAcceptableInput() const;
此属性描述,输入是否符合 inputMask 属性和 QValidator 类的要求。默认为 true。
②、 alignment: Qt::Alignment
访问函数:
Qt::Alignment alignment() const;
void setAlignment(Qt::Alignment);
此属性描述行编辑器文本的对齐方式,默认为 Qt::AlignLeft(左对齐)和 AlignVenter(垂
直居中), Qt::Alignment 枚举详见“部件的公共枚举”章节。
③、 clearButtonEnabled: bool //Qt5.2
访问函数:
bool isClearButtonEnabled() const;
void setClearButtonEnabled(bool);
此属性描述,行编辑器是否在不为空时显示“清除”按钮(见上图)。
④、 frame: bool 访问函数:
bool hasFrame() const;
void setFrame(bool);
此属性描述是否绘制 QLineEdit 的默认边框(见下图),默认为 true。
⑤、 placeholderText: QString访问函数:
QString placeholderText() const;
void setPlaceholderText(const QString&);
此属性描述是否启用行编辑器的占位符文本(提示语)。若行编辑器是空的,则当设置此属性后,
即使行编辑器具有焦点,也会使行编辑器显示一个灰色的占位符文本(见下图),若在
行编辑器中输入文本,则会清除占位符文本。默认为空字符串
int maxLength() const;
void setMaxLength(int);
此属性描述文本的最大允许长度,若文本太长,会被截断。当发生截断时,任何选定
的文本会被取消,文字光标位置设置为 0,且显示字符串的第一部分。默认为 32767。
⑦、 hasSelectedText: const bool 访问函数:
bool hasSelectedText() const;
此属性描述是否有文本被选中,若用户选中部分或全部文本,则为 true,否则为 false,
默认为 false。
⑧、 selectedText: const QString 访问函数:
QString selectedText() const;
获取选定的文本(要设置选中的文本需使用函数 setSelection()),若没有文本被选中,
则此属性为空字符串,默认为空字符串。
⑨、 text: QString 访问函数:
QString text() const;
void setText(const QString&);
信号: void textChanged(const QString &);
获取和设置行编辑器的文本。 若设置此属性,则会清除所选的内容、撤消/重做历史
记录,并将文字光标移至行尾,并把 modified 属性设为 false。使用 setText()插入文本
内容时,不会被验证。若文本过长,则截断为 maxLength()的长度。默认值为空字符
串。
⑩、 cursorPosition: int 访问函数:
int cursorPosition() const;
void setCursorPosition(int);
此属性描述当前文字光标的位置,默认为 0。
⑪、 cursorMoveStyle: Qt::CursorMoveStyle访问函数:
Qt::CursorMoveStyle cursorMoveStyle() const;
void setCursorMoveStyle(Qt::CursorMoveStyle);
此属性描述文字光标(插入符)的移动样式, Qt::CursorMoveStyle 枚举可取两个值,
其意义如下
Qt::LogicalMoveStyle:在从左向右显示的文本中,当按下左箭头键时光标
向左移动,但在从右向右显示的文本中,按下左箭头键时光标向右移动。
按下右箭头键的行为类似。
Qt::VisualMoveStyle:无论是从左向右还是从右向左显示的文本,按下左箭
头键时方向都向左移动,按下右箭头键时都向右移动。
⑫、 dragEnabled: bool 访问函数:
bool dragEnabled() const;
void setDragEnabled(bool);
此属性描述是否启用拖动功能(即在选定的文本上按下鼠标并移动时可以移动或复制
选定的文本),默认是禁用的。
⑬、 readOnly: bool 访问函数:
bool isReadOnly() const;
void setReadOnly(bool);
此属性描述行编辑器是否是只读模式,在只读模式下,仍然可以复制文本,但不能编
辑文本,而且不会显示文字光标。默认为 false。
⑭、 undoAvailable: const bool 访问函数:
bool isUndoAvailable() const;
此属性描述撤消(undo)是否可用,只要用户修改了行编辑器中的文本,则撤消就变成
可用的了。
⑮、 redoAvailable: const bool 访问函数:
bool isRedoAvailable() const;
此属性保存重做(redo)是否可用,当在行编辑器中执行了一次或多次撤消(undo)操作,
则重做就会变得可用,默认为 false。
⑯、 echoMode: EchoMode 访问函数:
EchoMode echoMode() const;
void setEchoMode(EchoMode);
此属性描述行编辑器的回显模式,回显模式是指行编辑器如何将用户输入的文本显示
(或回显)给用户, QLineEdit::EchoMode 枚举对回显模式进行了描述,见下表
QLineEdit::EchoMode 枚举(无标志) | ||
成员 | 值 | 说明 |
QLineEdit::Normal | 0 | 逐字显示输入的字符(默认值) |
QLineEdit::NoEcho | 1 | 不显示任何内容(可用于密码长度也需保密的密码) |
QLineEdit::Password | 2 | 显示与平台相关的密码掩码字符(比如将输入的内容显示为"*")。 |
QLineEdit:: PasswordEchoOnEdit |
3 | 在编辑时,显示输入的字符,否则以 Password 的形式显示字符。 |
switch (index) {
case 0:
//默认,输入什么即显示什么
echoLineEdit->setEchoMode(QLineEdit::Normal);
break;
case 1:
//密码,一般是用小黑点覆盖你所输入的字符
echoLineEdit->setEchoMode(QLineEdit::Password);
break;
case 2:
//编辑时输入字符显示输入内容,否则用小黑点代替
echoLineEdit->setEchoMode(QLineEdit::PasswordEchoOnEdit);
break;
case 3:
//任何输入都看不见(只是看不见,不是不能输入)
echoLineEdit->setEchoMode(QLineEdit::NoEcho);
}
⑰、 displayText: const QString 访问函数:
QString displayText() const;
此属性用于获取回显(显示)的文本,
若 echoMode 属性为 Normal 则返回的内容与 text()函数相同,
若 echoMode 属性为 Password 或 PasswordEchoOnEdit,则返回一串与平台相关
的长度为 text().length()的密码掩码字符,比如返回"****"。
若 echoMode 属性是 NoEcho,则返回一个空字符串。默认为空字符串。
⑱、 inputMask: QString 访问函数:
QString inputMask() const;
void setInputMask(const QString &);
此属性描述输入掩码,
此处掩码的作用是限制用户输入的文本(比如只能输入数字而不能输入字母等)。
若未设置掩码,则返回空字符串, QValidator 类可以代替掩码的功能。
设置空字符串可以取消掩码的设置。空格字符是空白的默认字符。
设置掩码的方法如下:
行编辑器的掩码需要对每一位输入的字符使用掩码字符(见下表)进行逐位
设置。 比如 setInputMask("AAAAA");表示只能在行编辑器中的前 5 位输入
ASCII 字母,不能输入数字或其他字符。 再如常见的 MAC 地址的输入就可
以使用 setInputMask("HH:HH:HH:HH:HH:HH");的掩码设置。
在掩码字符的分号之后的字符表示在行编辑器中输入空白时替换的字符。
比如 setInputMask("AAAAA;_");表示输入的空白使用"_"替换。
注: 空格需要选中要输入的那一位,然后才能输入空格。
下表为设置掩码时使用的掩码字符及其限制
⑲、 modified: bool 访问函数:
bool isModified() const;
void setModified(bool);
此属性描述,行编辑器的内容是否被用户修改了。调用 setText()函数会将该属性重置
为 false。默认为 false。
6、 QLineEdit 类中的函数
1)、 构造函数
QLineEdit(QWidget* parent = Q_NULLPTR);
QLineEdit(const QString &contents , QWidget* parent = Q_NULLPTR);
2)、 用于编辑的函数
①、 void copy() const; //槽,复制
②、 void cut(); //槽,剪切,若当前验证器不允许删除,则 cut()将复制而不删除
③、 void paste(); //槽,粘贴,若粘贴的文本不被验证器接受,则什么也不做。
④、 void insert(const QString &newText); //插入
⑤、 void backspace(); //删除左侧或所选择的文本。
⑥、 void del(); //删除右侧或所选择的文本。
⑦、 void clear(); //清除行编辑器的内容。
⑧、 void reod() ; //槽,若重做可用,则重做最后的操作
⑨、 void undo(); //槽,若撤消可用,则取消最后一次的操作。
3)、 与选择有关的函数
①、 void setSelection(int start, int length); 从位置 start 开始选择长度为 length 的文本,长度允许是负的
②、 void deselect(); 取消选定的文本
③、 void selectAll(); //槽,选择所有文本。
④、 int selectionLength() const; //返回选择的文本长度, qt5.10
⑤、 int selectionStart() const;
int selectionEnd() const; //qt5.10
4)、 与文字光标有关的函数
①、 void cursorPositionAt (const QPoint &pos); //返回位于 pos 处的文字光标的位置
②、 void end(bool mark);
void home(bool mark);
将文字光标移到开头/行尾。若 mark 为 true,则从当前位置选择直到第一/最后一个位
置的文本,否则取消已选定的文本。
③、 void cursorBackward (bool mark, int steps = 1);
void cursorForward(bool mark, int steps = 1);
将文字光标向右(Forwar)/向左(Backward)移动 steps 个字符,若 mark 为真,则选择每
个移过的字符,否则清除已选定的文本。
④、 void cursorWordBackward(bool mark);
void cursorWordForward(bool mark);
向右(Forwar)/向左(Backward)将文字光标移动一个单词,若 mark 为 true,则选中该单
词,否则取消被选中的内容。
5)、 以下函数用于设置和获取页边距
void setTextMargins(int left, int top, int right, int bottom);
void setTextMargins(const QMargins &margins);
void getTextMargins(int *left, int *top, int *right, int *bottom) const;
QMargins textMargins() const;
6)、 以下函数用于设置和获取验证器及自动完成器。
6.1 验证器
void setValidator( const QValidator* v);
const QValidator* validator() const;
限制输入框中的文本内容,比如:输入框只包含整数。
只允许输入数字:
ui->lineEdit->setValidator(new QRegExpValidator(QRegExp("[0-9]+$")));
只允许输入浮点型数据:
ui->lineEdit->setValidator(new QRegExpValidator(QRegExp("^(-?\d+)(\.\d+)?$")));
只能输入字母:
ui->lineEdit->setValidator(new QRegExpValidator(QRegExp("^[A-Za-z]+$")));
只能输入数字和字母:
ui->lineEdit->setValidator(new QRegExpValidator(QRegExp("[a-zA-Z0-9]+$")));
只能输入-9999~9999的整型数据:
ui->lineEdit->setValidator(new QRegExpValidato(new QRegExpValidator(QRegExp("^-?(9999|[0-9]?[0-9]?[0-9]?\\d(\\.\\d{1,4})?)$")));
只能输入-180~180的浮点型数据:
ui->lineEdit>setValidator(new QRegExpValidator(QRegExp("^-?(180|1?[0-7]?\\d(\\.\\d{1,4})?)$"))); //只能输入数字
其他更多可查看:
QT QLineEdit 只能输入字母或数字,输入格式约束(正则表达式)
6.2 自动完成器
void setCompleter(QCompleter* c)
QCompleter* completer() const;
7)、 与上下文菜单有关的函数(即点击鼠标右键时弹出的菜单)
①、 QMenu* createStandardContextMenu();
该函数创建了一个标准的上下文菜单,这个函数默认是由 contextMenuEvent()事件处
理函数调用的。
②、 virtual void contextMenuEvent(QContextMenuEvent* event) //受保护的
该函数是 QWidget::contextMenuEvent()函数的重新实现。
该函数的作用是显示由 createStandardContextMenu()函数创建的标准上下文菜单,
若要禁用行编辑器的上下文菜单,可以设置 QWidget::contextMenuPolicy 属性的
值为 Qt::NoContextMenu。
若要使用自定义的上下文菜单,则可以重新实现此函数。
若要扩展标准的上下文菜单, 则重新实现该函数,并向 createStandardContextMenu()
函数返回的菜单中添加内容,然后返回修改后的菜单。 代码大致如下
void contextMenuEvent(QContextMenuEvent* event){
QMenu *menu = createStandardContextMenu();
menu->addAction("XXX");
……
menu->exec(event->globalPos());
delete menu; }
7、 QLineEdit 类中的信号
①、 void cursorPositionChanged(int old, int new); //信号
当文字光标移动时就会发送此信号, old 是移动前的位置, new 是移动后的位置。
②、 void editingFinished(); //信号
当按下 enter 键或行编辑器失去焦点时,发送此信号。若在行编辑器中设置了验证器
或掩码,则只有当输入的内容符合掩码的要求或验证器返回 QValidator::Acceptable
时,才会发送该信号。 比如 setInputMask("AAAA"); 则只有在输入 4 位正确的字符之
后才会发送此信号,若只正确输入了 3 位或 2 位则不会发送此信号。
③、 void returnPressed() //信号
当按下 enter 键时(注意:失去焦点时不会发送),发送此信号。若在行编辑器中设置
了 验 证 器 或 掩 码 , 则 只 有 当 输 入 的 内 容 符 合 掩 码 的 要 求 或 验 证 器 返 回
QValidator::Acceptable 时,才会发送该信号(具体见 editingFinished 信号)。
④、 void selectionChanged(); //信号
只要选择发生了改变,就会发送此信号。 注意:仅仅移动文字光标,而未使选择的内
容发生改变,则不会发送此信号。
⑤、 void textChanged(const QString &text); //信号
当文本改变时发送此信号, text 参数保存的是新的文本。注意,当以编程的方式更改文本时
(比如调用 setText()),也会发送此信号。
⑥、 void textEdited(const QString &text); //信号
当文本被编辑时发送此信号, text 参数保存的是新的文本。注意,当编程的方式更改文本时(比如调用 setText()),不会发送此信号。
以上函数及信号都比较简单,示例略。