Qt QLineEdit 输入内容后字数在右侧动态展示

前言

QLineEdit 设置可输入最大长度可以使用

cpp 复制代码
lineEdit->setMaxLength(10);

怎么实时的把当前输入字数显示出来呢,像饿了么的 input 组件那样

javascript 复制代码
<el-input
  type="text"
  placeholder="请输入内容"
  v-model="text"
  maxlength="10"
  show-word-limit
>
</el-input>

Qt 中 QLineEdit 配合 QLabel 也可以很方便的实现这个效果。

效果图

代码实现

cpp 复制代码
#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_QLineEditDemo.h"
#include <QLineEdit>
#include <QLabel>

class QLineEditDemo : public QMainWindow
{
	Q_OBJECT

public:
	QLineEditDemo(QWidget *parent = Q_NULLPTR);

private:
	Ui::QLineEditDemoClass ui;
	QLineEdit	*lineEdit;
	QLabel		*labelMax;

private slots:
	void onEdit(const QString& text);
};
cpp 复制代码
#include "QLineEditDemo.h"

QLineEditDemo::QLineEditDemo(QWidget *parent)
	: QMainWindow(parent)
{
	ui.setupUi(this);

	// 创建输入框
	lineEdit = new QLineEdit(this);
	lineEdit->setPlaceholderText(QString::fromLocal8Bit("请输入文本"));
	lineEdit->setFixedSize(326,32);
	connect(lineEdit, &QLineEdit::textEdited, this, &QLineEditDemo::onEdit);
	
	//lineEdit 增加字数label
	lineEdit->setStyleSheet(QString::fromLocal8Bit("QLineEdit{\
		padding:6px 55px 6px 12px;\
		border-radius: 2px;\
		border: 1px solid #408cff;\
		background: #FFF;\
		font: 10pt \"微软雅黑\";\
		}"));
	labelMax = new QLabel("0/10", lineEdit);
	labelMax->setObjectName("labelMax"); // 设置子控件的对象名
	labelMax->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
	labelMax->setFixedSize(45, 26); // 设置固定高,lineEditReason 32
	labelMax->setStyleSheet(QString::fromLocal8Bit("border:none;color: #cccccc;font: 10pt \"微软雅黑\";"));
	labelMax->move(326 - 45 - 10, (32 - 26) / 2); // 将label移动到lineEdit右侧 

	ui.verticalLayout->addWidget(lineEdit);

}

void QLineEditDemo::onEdit(const QString& text)
{
	int len = text.length();
	labelMax->setText(QString("%1/10").arg(len));
	if (len <= 10)
	{
		labelMax->setStyleSheet(QString::fromLocal8Bit("color: #cccccc;font: 10pt \"微软雅黑\";"));
	}
	else
	{
		labelMax->setStyleSheet(QString::fromLocal8Bit("color: #FF5050;font: 10pt \"微软雅黑\";"));
	}
}

需要注意的是,QLabel 的尺寸和移动到 QLineEdit 的位置是相关的。

如变更QLabel的尺寸,相关位置也要做调整。

另外我这里没有限制最大可输入长度,而是当超过最大长度后,将字数红色展示。

实际应用中可以和提交按钮做个联动,超过就让其不可用就好。

相关推荐
水瓶丫头站住2 小时前
Qt的QGraphicsView控件的样式设置
qt·样式设置
已是上好佳2 小时前
介绍一下Qt 中的QSizePolicy 布局策略
数据库·qt
ccloud1110 小时前
OpenGL实现场景编辑器
qt·游戏引擎
熬夜的猪仔11 小时前
QT多线程
qt
꧁坚持很酷꧂13 小时前
QT登录系统界面
开发语言·qt
达斯维达的大眼睛1 天前
qt小项目,简单的音乐播放器
开发语言·qt
Ryan_Gosling1 天前
QT-异步编程
开发语言·qt
信必诺1 天前
GStreamer —— 2.2、Windows下Qt加载GStreamer库后运行 - “教程2:GStreamer 概念“(附:完整源码)
qt·gstreamer
宁静致远20211 天前
qt 操作多个sqlite文件
qt·sqlite·嵌入式linux开发
laimaxgg1 天前
Qt常用控件之表格QTableWidget
开发语言·前端·c++·qt·qt5·qt6.3