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()));
}