2.8 输入控件(一)

简介: 2.8 输入控件(一)

2.8.1 QLineEdit

2.8.1.1 属性

QLineEdit是行文本编辑框。我们直接来看它的属性。

01ebd755782e4c909dad0843d3544acf.jpeg


就其中几个比较重要的属性做一下介绍

1 alignment::设置输入文字的方向

水平方向

  • Qt::AlignLeft 文字左对齐,从左往右输入。
  • Qt::AlignRight 文字右对齐,从右往左输入。
  • Qt::AlignHCenter 文字水平居中
  • Qt::AlignJustify 等同于Qt::AlignLeft

垂直方向

  • Qt::AlignTop 文字上对齐
  • Qt::AlignBottom 文字下对齐
  • Qt::AlignVCenter 文字垂直居中
  • Qt::AlignBaseline 以基准线对齐。下面是一张维基百科的基准线图

01ebd755782e4c909dad0843d3544acf.jpeg


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只允许输入数字或字母等。下图是每个掩码的意义:

是必须表示——是:该位置必须要填写;否:该位置可以用空格代替。

01ebd755782e4c909dad0843d3544acf.jpeg

还可以调用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

01ebd755782e4c909dad0843d3544acf.jpeg

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交流群,方便讨论学习。

相关文章
|
2月前
根据用户是否输入和是否文本框内容为空来决定显示按钮颜色
根据用户是否输入和是否文本框内容为空来决定显示按钮颜色
23 0
arx 中对话框无法获得输入焦点的问题
arx 中对话框无法获得输入焦点的问题
|
2月前
|
C++
[Qt5&控件] Label控件显示文本内容(字符串和整数)
[Qt5&控件] Label控件显示文本内容(字符串和整数)
94 0
[Qt5&控件] Label控件显示文本内容(字符串和整数)
|
12月前
|
C#
WPF限制文本框只能输入数字
WPF限制文本框只能输入数字
209 0
|
存储 前端开发 C++
2.8 输入控件(三)
2.8 输入控件(三)
2.8 输入控件(三)
|
JavaScript
可输入的下拉框(简易实现)
第一种效果 (带自动匹配)这个效果再之前的的博客里面已经讲到过了,还没有看过的小伙伴可以移步→ http://www.cnblogs.com/zhangxiaoyong/p/5763432.html 第二种效果 今天主要讲第二种效果,也比较简单,先看下效果 实现 页面部分 1...
1843 0
|
Android开发 数据格式 XML
关于 AutoCompleteTextView 不输入文字就显示下拉
由于项目要做一个带有下拉提示的输入框,第一时间就想到了AutoCompleteTextView。但是需求和控件还是有一点出入,公司的需求为:点击输入框即可显示提示数据的数据。
1578 0