Qt之QLineEdit

1.概述

QLineEdit允许用户输入和编辑单行纯文本。本文主要介绍QLineEdit的几个常用功能。
1.介绍文本框的样式
2.设置文本框是否可编辑
3.设置文本框的显示和隐藏
4.设置密码文本框
5.设置文本框文本对齐
6.设置文本框图标,采用验证器验证用户输入手机号
7.介绍QLineEdit的6种信号槽
QLineEdit功能验证实现如下图所示:
在这里插入图片描述

2.实现过程

2.1新建MyLineEdit类

新建MyLineEdit类,继承自QLineEdit类,封装文本框样式和文本框边框显隐方法。
(1)MyLineEdit.h

#ifndef MYLINEEDIT_H
#define MYLINEEDIT_H

#include <QLineEdit>
#include <QAction>
class MyLineEdit : public QLineEdit
{
public:
    MyLineEdit(QWidget *parent = 0);

    //隐藏边框
    void HideBorder(bool isHide = true);

    //设置文本框样式
    QString setLineEditQss(int radius = 3,                                    //圆角半径
                                  int borderWidth = 2,                        //边框大小
                                  const QString &normalColor = "#DCE4EC",     //正常颜色
                                  const QString &focusColor = "#34495E",      //选中颜色
                                  const QString iconPath = "");
};

#endif // MYLINEEDIT_H

(2)MyLineEdit.cpp

#include "mylineedit.h"

MyLineEdit::MyLineEdit(QWidget *parent):QLineEdit(parent)
{

}

void MyLineEdit::HideBorder(bool isHide)
{
    if(isHide)
        setStyleSheet("board-width:0;border-style:outset");
    else
        setLineEditQss(5,2,"#DCE4EC","#34495E");
}

QString MyLineEdit::setLineEditQss(int radius, int borderWidth,
                                  const QString &normalColor,
                                  const QString &focusColor,
                                  const QString iconPath)
{
    QStringList list;
    list.append(QString("QLineEdit{border-style:none;padding:3px;border-radius:%1px;border:%2px solid %3;}")
                .arg(radius).arg(borderWidth).arg(normalColor));
    list.append(QString("QLineEdit:focus{border:%1px solid %2;}")
                .arg(borderWidth).arg(focusColor));

    QString qss = list.join("");
    setStyleSheet(qss);

    if(iconPath != "")
    {
        QAction *action = new QAction(this);
        action->setIcon(QIcon(iconPath));

        //图标位置
        //QLineEdit::LeadingPosition 左侧
        //QLineEdit::TrailingPosition 右侧
        addAction(action,QLineEdit::TrailingPosition);
    }
    return qss;
}

2.2新建LineEditDlg类

新建LineEditDlg类,继承自QWidget类,添加按钮、文本框、label等界面元素,介绍QLineEdit功能。
(1)LineEditDlg.h

#ifndef LINEEDITDLG_H
#define LINEEDITDLG_H

#include <QWidget>

namespace Ui {
class LineEditDlg;
}

class LineEditDlg : public QWidget
{
    Q_OBJECT

public:
    explicit LineEditDlg(QWidget *parent = 0);
    ~LineEditDlg();

private slots:
    void on_btnEdit_clicked();

    void on_btnHideBord_clicked();

    void on_btnPwd_clicked();

    void on_btnAlignment_clicked();

    void onTextChange(const QString &text);

    void onTextEdited(const QString &text);

    void onCursorPositionChanged(int lastPos, int curPos);

    void onReturnPressed();

    void onEditingFinished();

    void onSelectionChanged();

private:
    Ui::LineEditDlg *ui;
};

#endif // LINEEDITDLG_H

(2)LineEditDlg.cpp

#include "lineeditdlg.h"
#include "ui_lineeditdlg.h"
#include "../Code/MyControl/mylineedit.h"

LineEditDlg::LineEditDlg(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::LineEditDlg)
{
    ui->setupUi(this);

    //设置文本框风格
    ui->lineEdit_Bord->setLineEditQss(5,2);
    ui->lineEdit_Pwd->setLineEditQss(5, 2, "#999999", "#1ABC9C");
    ui->lineEdit_Alignment->setLineEditQss(5, 2, "#999999", "#3498DB");
    ui->lineEdit_Phone->setLineEditQss(5, 2, "#999999", "#E74C3C","../SRC/other/PHONE.ICO");

    //设置文本框默认显示
    //ui->lineEdit_Pwd->setPlaceholderText("aB123456");
    ui->lineEdit_Alignment->setPlaceholderText("Welcom to Beijing!!!");

    //设置手机号输入
    QRegExp phoneReg("^1([358][0-9]|4[579]|66|7[0135678]|9[89])[0-9]{8}$");
    ui->lineEdit_Phone->setValidator(new QRegExpValidator(phoneReg,ui->lineEdit_Phone));

    //连接QLineEdit信号槽
    connect(ui->lineEdit_textChanged ,SIGNAL(textChanged(const QString &)),this,SLOT(onTextChange(const QString&)));
    connect(ui->lineEdit_textEdit ,SIGNAL(textEdited(const QString &)),this,SLOT(onTextEdited(const QString &)));
    connect(ui->lineEdit_cursor ,SIGNAL(cursorPositionChanged(int, int)),this,SLOT(onCursorPositionChanged(int, int)));
    connect(ui->lineEdit_returnPress ,SIGNAL(returnPressed()),this,SLOT(onReturnPressed()));
    connect(ui->lineEdit_editFinish ,SIGNAL(editingFinished()),this,SLOT(onEditingFinished()));
    connect(ui->lineEdit_selectChange ,SIGNAL(selectionChanged()),this,SLOT(onSelectionChanged()));
}

LineEditDlg::~LineEditDlg()
{
    delete ui;
}

2.3文本框禁用

void LineEditDlg::on_btnEdit_clicked()
{
   if(ui->btnEdit->text() == QString::fromLocal8Bit("可编辑"))
   {
      ui->lineEdit_Enable->setEnabled(false);
      ui->btnEdit->setText(QString::fromLocal8Bit("不可编辑"));
   }
   else
   {
      ui->lineEdit_Enable->setEnabled(true);
      ui->btnEdit->setText(QString::fromLocal8Bit("可编辑"));
   }
}

2.4边框显隐

void LineEditDlg::on_btnHideBord_clicked()
{
   if(ui->btnHideBord->text() == QString::fromLocal8Bit("隐藏边框"))
   {
      ui->lineEdit_Bord->HideBorder();
      ui->btnHideBord->setText(QString::fromLocal8Bit("不隐藏边框"));
   }
   else
   {
      ui->lineEdit_Bord->HideBorder(false);
      ui->btnHideBord->setText(QString::fromLocal8Bit("隐藏边框"));
   }
}

2.5文本框密码

void LineEditDlg::on_btnPwd_clicked()
{
   if(ui->btnPwd->text() == QString::fromLocal8Bit("显示密码"))
   {
       ui->lineEdit_Pwd->setEchoMode(QLineEdit::Password);
       ui->btnPwd->setText(QString::fromLocal8Bit("不显示密码"));
   }
   else
   {
       ui->lineEdit_Pwd->setEchoMode(QLineEdit::Normal);
       ui->btnPwd->setText(QString::fromLocal8Bit("显示密码"));
   }
}

2.6文本框文本对齐

void LineEditDlg::on_btnAlignment_clicked()
{
   if(ui->btnAlignment->text() == QString::fromLocal8Bit("左对齐"))
   {
      ui->btnAlignment->setText(QString::fromLocal8Bit("居中"));
      ui->lineEdit_Alignment->setAlignment(Qt::AlignCenter);
   }
   else if(ui->btnAlignment->text() == QString::fromLocal8Bit("居中"))
   {
       ui->btnAlignment->setText(QString::fromLocal8Bit("右对齐"));
       ui->lineEdit_Alignment->setAlignment(Qt::AlignRight);
   }
   else if(ui->btnAlignment->text() == QString::fromLocal8Bit("右对齐"))
   {
       ui->btnAlignment->setText(QString::fromLocal8Bit("左对齐"));
       ui->lineEdit_Alignment->setAlignment(Qt::AlignLeft);
   }
}

2.7信号槽

(1)void textChanged(const QString &)
//当QLineEdit中的文本改变时,发出此信号,text是新的文本。
void LineEditDlg::onTextChange(const QString &text)
{
   ui->label_textChange->setText(text);
}
(2)void textEdited(const QString &);
//当QLineEdit中的文本改变时,发出此信号,text是新的文本。
void LineEditDlg::onTextEdited(const QString &text)
{
   ui->label_textEdit->setText(text);
}
(3)void cursorPositionChanged(int, int);
//当鼠标移动时发出此信号,lastPos为先前的位置,curPos为新位置。
void LineEditDlg::onCursorPositionChanged(int lastPos, int curPos)
{
   ui->label_cursor->setText(QString("From %1 to %2").arg(lastPos).arg(curPos));
}
(4)void returnPressed();
//当返回或回车键按下时发出此信号
void LineEditDlg::onReturnPressed()
{
   ui->label_returnPress->setText(QString::fromLocal8Bit("ReturnPressed()返回或回车键按下"));
}
(5)void editingFinished();
//当按返回或者回车键时,或者行编辑失去焦点时,发出此信号。
void LineEditDlg::onEditingFinished()
{
   ui->label_editChange->setText(QString::fromLocal8Bit("EditingFinished()返回或回车键按下"));
}
(6)void selectionChanged();
//当选文本改变时,发出此信号。
void LineEditDlg::onSelectionChanged()
{
  ui->label_selectChange->setText(QString::fromLocal8Bit("SelectionChanged:%1").arg(ui->lineEdit_selectChange->text()));
}
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值