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的尺寸,相关位置也要做调整。

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

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

相关推荐
yugi9878381 天前
基于Qt框架开发多功能视频播放器
开发语言·qt
MeowKnight9581 天前
【Qt】Qt实践记录2——TCP通信服务器和客户端demo
笔记·qt
Larry_Yanan2 天前
QML学习笔记(五十二)QML与C++交互:数据转换——时间和日期
开发语言·c++·笔记·qt·学习·ui·交互
十启树2 天前
Qt 中实现炫酷的开机启动动画
qt
一叶之秋14123 天前
QT背景介绍与环境搭建
开发语言·qt
QT 小鲜肉3 天前
【QT/C++】Qt网络编程进阶:UDP通信和HTTP请求的基本原理和实际应用(超详细)
c语言·网络·c++·笔记·qt·http·udp
四维碎片3 天前
【Qt】大数据量表格刷新优化--只刷新可见区域
开发语言·qt
一叶之秋14123 天前
Qt开发初识
开发语言·qt
梵尔纳多3 天前
ffmpeg 使用滤镜实现播放倍速
c++·qt·ffmpeg
QT 小鲜肉3 天前
【QT/C++】Qt网络编程进阶:TCP网络编程的基本原理和实际应用(超详细)
c语言·开发语言·网络·c++·qt·学习·tcp/ip