在界面上拉一个 LINEEDIT 控件,和几个按钮:
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include <QMessageBox>
#include <QLineEdit>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
// QLineEdit 是一个单行文本编辑框
ui->lineEdit->setText("The QLineEdit widget is a one-line text editor.");
}
Widget::~Widget()
{
delete ui;
}
// 向左删除一位字符
void Widget::on_btnBackspace_clicked()
{
// void QLineEdit::backspace()
// 如果 lineEdit 中没有选中文本,则删除光标左侧的一个字符;
// 如果选择了任何文本,则将光标移动到所选文本的开头,并从移动到的新位置开始,删除左侧的一个字符;
ui->lineEdit->backspace();
}
// 向左选择一位字符
void Widget::on_btnCursorBackward_clicked()
{
// void QLineEdit::cursorBackward(bool mark, int steps = 1)
// 向左移动光标,移动的字符个数由参数 steps 决定,默认为 1,即向左移动一个字符;
// 如果参数 mark 为 true,则光标向左移动过程中 经过的每一个字符都处于选中状态;
// 如果参数 mark 为 false,则清除选中的内容;
ui->lineEdit->cursorBackward(true, 1);
// void QLineEdit::cursorForward(bool mark, int steps = 1)
// 用法和 cursorBackward 一样,只不过是改成光标向右移动而已;
// 获取当前光标所在的位置
int position = ui->lineEdit->cursorPosition();
qDebug() << "当前光标位置:" << QString::number(position);
}
// 向左选择一个单词
void Widget::on_btnCursorWordBackward_clicked()
{
// void QLineEdit::cursorWordBackward(bool mark)
// 将光标向左移动一个单词;如果参数 mark 为 true,则该单词处于选中状态;
ui->lineEdit->cursorWordBackward(true);
// void QLineEdit::cursorWordForward(bool mark)
// 用法和 cursorWordBackward 一样,只不过把光标改成向右移动;
}
// 删除光标右侧一个字符
void Widget::on_btnDel_clicked()
{
// 如果没有选择文本,则删除光标右侧的一个字符。
// 如果选择了任何文本,测试发现,选择文本的方式不同,删除的效果也不同:
// 1、如果用鼠标从左向右选择文本,则光标移动到选中文本的右侧,然后再把光标右侧的一个字符删除;
// 2、如果用鼠标从右向左选择文本,则光标移动到选中文本的左侧,然后再把光标右侧的一个字符删除;
// 即用鼠标选择文本时,调用 del() 方法是会从光标最后在所的位置开始,删除光标右侧的一个字符;
// 3、如果使用 cursorBackward 或者 cursorWordBackward 方法向左选择字符 或 单词时,
// 调用 del() 方法时,会将选中的所有字符全部删除;
ui->lineEdit->del();
}
// 取消任何选定的文本。
void Widget::on_btnDeselect_clicked()
{
ui->lineEdit->deselect();
}
// 获取显示的文本
void Widget::on_btnDisplayText_clicked()
{
// displayText() 方法用于获取显示的文本;
// 如果 echoMode 是常规的,它将返回与 text() 相同的结果;
// 如果 echoMode 是 Password 或 PasswordEchoOnEdit,它将返回一个与平台相关的密码掩码字符串,
// 字符串大小为 text().length();
// 如果 echoMode 是 NoEcho,则返回空字符串;
QString text = ui->lineEdit->text();
qDebug() << "text():" << text.toUtf8().data();
QString disText = ui->lineEdit->displayText();
qDebug() << "displayText():" << disText.toUtf8().data();
}
// 选中从光标到行尾的所有字符
void Widget::on_btnEnd_clicked()
{
// 将光标移动到行尾;
// 如果参数为 true,则从光标位置开始到行尾的所有字符都将被选中;
// 如果参数为 false,则移动光标时,取消任何已经选中的文本;
ui->lineEdit->end(true);
// void QLineEdit::home(bool mark)
// 用法和 end() 一样,只不过是将光标移动到行首;
}
// 插入数据
void Widget::on_btnInsert_clicked()
{
// 从当前光标所在位置插入数据
ui->lineEdit->insert("锄禾日当午");
}
// 获取选中的文本;如果未选中,返回空字符串;
void Widget::on_btnSelectedText_clicked()
{
// 测试发现:点击按钮时,获取不到用鼠标选中的文本内容,
// 只能获取到 cursorBackward、cursorWordBackward、end 等方法选中的文本;
// 这是因为点击按钮时,焦点变到按钮上了,lineEdit 失去焦点了,即用鼠标选中的内容消失了;
// 而用 cursorBackward、cursorWordBackward、end 等方法选中的文本内容还是处于选中状态;
QString text = ui->lineEdit->selectedText();
qDebug() << "当前选中的文本:" << text.toUtf8().data();
}
// 设置居中显示
void Widget::on_btnAlignment_clicked()
{
ui->lineEdit->setAlignment(Qt::AlignCenter);
}
// 显示清除按钮
void Widget::on_btnShowClearBtn_clicked()
{
// true:表示在 lineEdit 不为空时,在控件尾部显示一个清除按钮;
// false:则不会显示清除按钮(默认);
ui->lineEdit->setClearButtonEnabled(true);
}
// 设置回显模式
void Widget::on_btnEchoMode_clicked()
{
// QLineEdit::Normal:常规模式,lineEdit 用于显示文本信息(默认);
// QLineEdit::NoEcho:不显示任何信息(即使输入信息,也不会显示);
// QLineEdit::Password:显示平台相关的密码掩码字符,而不是实际输入的字符;
// QLineEdit::PasswordEchoOnEdit:在编辑时显示正常字符,一旦退出编辑状态则显示密码字符;
ui->lineEdit->setEchoMode(QLineEdit::PasswordEchoOnEdit);
}
// 设置允许显示的最大字符数
void Widget::on_btnMaxLength_clicked()
{
ui->lineEdit->setMaxLength(50);
}
// 设置占位符(即提示信息)
void Widget::on_btnPlaceholderText_clicked()
{
ui->lineEdit->clear(); // 清除 lineEdit 上的文本信息
ui->lineEdit->setPlaceholderText("请输入密码"); // 设置提示信息
ui->lineEdit->setFocus(); // 设置 lineEdit 获取焦点
}
// 设置只读
void Widget::on_btnReadOnly_clicked()
{
ui->lineEdit->setReadOnly(true);
}
// 常用信号
void Widget::on_btnSignal_clicked()
{
// 光标位置改变触发的信号
connect(ui->lineEdit, &QLineEdit::cursorPositionChanged, [=](int oldPos, int newPos){
qDebug() << "cursorPositionChanged 信号:" << QString::number(oldPos) << QString::number(newPos);
});
// 编辑结束触发的信号
connect(ui->lineEdit, &QLineEdit::editingFinished, [=](){
qDebug() << "editingFinished 信号:" << ui->lineEdit->text();
});
// 选择文本改变时触发的信号
connect(ui->lineEdit, &QLineEdit::selectionChanged, [=](){
// 输出选中的文本信息:
qDebug() << "selectionChanged 信号:" << ui->lineEdit->selectedText();
});
}
// 常用槽函数
void Widget::on_btnSlot_clicked()
{
// void clear() // 清空
// void copy() const // 拷贝(将选中的文本复制到剪贴板,前提 echoMode 是 Normal)
// void cut() // 剪切(将选中的文本复制到剪贴板,并删除原文本,前提 echoMode 是 Normal)
// void paste() // 粘贴(将剪贴板的文本插入到当前光标所在的位置,如果 lineEdit 不是只读的,那么插入的时候会删除 lineEdit 中已选中的任何文本)
// void redo() // 重复最后一个操作
// void selectAll() // 选择所有文本,并将光标移动到末尾
// void setText(const QString &) // 设置文本内容
// void undo() // 撤销最后一个操作
}