2.8.1 QLineEdit
2.8.1.1 属性
QLineEdit是行文本编辑框。我们直接来看它的属性。
就其中几个比较重要的属性做一下介绍
1 alignment::设置输入文字的方向
水平方向
- Qt::AlignLeft 文字左对齐,从左往右输入。
- Qt::AlignRight 文字右对齐,从右往左输入。
- Qt::AlignHCenter 文字水平居中
- Qt::AlignJustify 等同于Qt::AlignLeft
垂直方向
- Qt::AlignTop 文字上对齐
- Qt::AlignBottom 文字下对齐
- Qt::AlignVCenter 文字垂直居中
- Qt::AlignBaseline 以基准线对齐。下面是一张维基百科的基准线图
2 clearButtonEnabled:清空按钮是否可见
如果设置为true,会在行编辑器右侧多出一个清空按钮,点击该按钮,内容会被清空。
3. echoMode:输入模式。
- QLineEdit::Normal:按照输入的字符,显示字符。
- QLineEdit::NoEcho:不显示输入字符,这种模式适合于密码和密码长度都保密的情况。
- QLineEdit::Password:使用平台相关的掩码来代替输入字符显示。
- QLineEdit::PasswordEchoOnEdit:编辑时显示字符,结束编辑则显示掩码。
4 displayText:显示文字。区别与text。
- 如果echoMode设置为Normal,则返回原文本;
- 如果EchoMode设置为Password或PasswordEchoOnEdit,它将返回一个与平台相关的密码掩码字符,比如“* * * * * *”;
- 如果EchoMode设置为NoEcho,则返回空字符串。
5 inputMask 掩码。
用于设置有效输入。比如,LineEdit只允许输入数字或字母等。下图是每个掩码的意义:
是必须表示——是:该位置必须要填写;否:该位置可以用空格代替。
还可以调用setValidator()设置验证器。
6 placeholderText:占位字符串。
当编辑框为空时,会有一个灰色的字符串用来提示用户需要输入的内容。
7 readOnly:只读。
只能用来显示,不能修改。
8 selectedText:被选中的字符串。
2.8.1.2 接口
1.setValidator() 设置验证器,类似于inputMask。
- QIntValidator 只接受整数,并且可以设置整数范围
- QDoubleValidator 接受双精度浮点数,并且可设置范围。
- QRegExpValidator 接受符合正则表达式规则的字符。
2 setCompleter()。
这个函数比较重要,通过此函数可以使编辑器拥有提示或记忆功能。具体用法我会在下边的示例中给出。
2.8.2 示例
新建Gui项目InputWidget,类名为InputWidget,继承自QWidget。
ui界面,拖入一个QTabWidget,标签改为QLineEidt
inputwidget.h
#ifndef INPUTWIDGET_H #define INPUTWIDGET_H #include <QWidget> namespace Ui { class InputWidget; } class InputWidget : public QWidget { Q_OBJECT public: explicit InputWidget(QWidget *parent = 0); ~InputWidget(); private slots: void on_checkBox_clearBtn_toggled(bool checked); void on_checkBox_readOnly_toggled(bool checked); void on_combo_inputH_currentIndexChanged(int index); void on_combo_inputV_currentIndexChanged(int index); void on_combo_echoMode_currentIndexChanged(int index); void on_combo_validator_currentIndexChanged(int index); void on_lineEdit_inputMask_textChanged(const QString &arg1); private: void initLineEditTab(); private: Ui::InputWidget *ui; }; #endif // INPUTWIDGET_H
inputwidget.cpp
#include "inputwidget.h" #include "ui_inputwidget.h" InputWidget::InputWidget(QWidget *parent) : QWidget(parent), ui(new Ui::InputWidget) { ui->setupUi(this); /*QLineEdit*/ initLineEditTab(); } InputWidget::~InputWidget() { delete ui; } void InputWidget::on_checkBox_clearBtn_toggled(bool checked) { ui->lineEdit->setClearButtonEnabled(checked); } void InputWidget::on_checkBox_readOnly_toggled(bool checked) { ui->lineEdit->setReadOnly(checked); } void InputWidget::on_combo_inputH_currentIndexChanged(int index) { ui->lineEdit->setAlignment((Qt::Alignment) (Qt::AlignLeft<<index)); } void InputWidget::on_combo_inputV_currentIndexChanged(int index) { ui->lineEdit->setAlignment((Qt::Alignment) (Qt::AlignTop<<index)); } void InputWidget::on_combo_echoMode_currentIndexChanged(int index) { ui->lineEdit->setEchoMode((QLineEdit::EchoMode)index); } void InputWidget::on_combo_validator_currentIndexChanged(int index) { //删除当前验证器 ui->lineEdit->setValidator(0); if (index == 1) { //整数验证器,0-80 QIntValidator* validator = new QIntValidator(20, 80); ui->lineEdit->setValidator(validator); } else if (index == 2) { //双精度验证器,0.-1000. QDoubleValidator* validator = new QDoubleValidator(); validator->setBottom(0.); validator->setTop(100.); ui->lineEdit->setValidator(validator); } else if (index == 3) { //匹配0-99的整数 QRegExpValidator* validator = new QRegExpValidator(QRegExp("^\\d\\d?$")); ui->lineEdit->setValidator(validator); } } void InputWidget::on_lineEdit_inputMask_textChanged(const QString &arg1) { ui->lineEdit->setInputMask(arg1); } void InputWidget::initLineEditTab() { //输入方向-水平 QStringList textList; textList << "AlignLeft" <<"AlignRight" << "AlignHCenter" << "AlignJustify"; ui->combo_inputH->addItems(textList); //输入方向-垂直 textList.clear(); textList << "AlignTop" <<"AlignBottom" << "AlignVCenter" << "AlignBaseline"; ui->combo_inputV->addItems(textList); //输入模式 textList.clear(); textList << "Normal" <<"NoEcho" << "Password" << "PasswordEchoOnEdit"; ui->combo_echoMode->addItems(textList); //验证器 textList.clear(); textList << "无验证器" << "Int" <<"Double" << "Reqexp"; ui->combo_validator->addItems(textList); }
可以在设置掩码中输入"000.000.000.000",看看会有什么效果。
好了,关于QLineEidt的内容就讲到这里,如果你想第一时间看到小豆君的技术分享,就赶快关注吧。
欢迎关注小豆君的微信公众号:小豆君,只要关注,便可加入小豆君为大家创建的C++\Qt交流群,方便讨论学习。