2.8 输入控件(一)

2.8.1 QLineEdit

2.8.1.1 属性

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


2.8 输入控件(一)_第1张图片

就其中几个比较重要的属性做一下介绍
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只允许输入数字或字母等。下图是每个掩码的意义:
是必须表示——是:该位置必须要填写;否:该位置可以用空格代替。

2.8 输入控件(一)_第2张图片
Paste_Image.png

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

2.8 输入控件(一)_第3张图片
Paste_Image.png

inputwidget.h

#ifndef INPUTWIDGET_H
#define INPUTWIDGET_H

#include 

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<lineEdit->setAlignment((Qt::Alignment) (Qt::AlignTop<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",看看会有什么效果。

更多分享请关注微信公众号:跟小豆君学Qt
知乎:小豆君的干货铺

你可能感兴趣的:(2.8 输入控件(一))