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

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

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

相关推荐
范特西.i3 天前
QT聊天项目(8)
开发语言·qt
枫叶丹43 天前
【Qt开发】Qt界面优化(七)-> Qt样式表(QSS) 样式属性
c语言·开发语言·c++·qt
十五年专注C++开发3 天前
Qt deleteLater作用及源码分析
开发语言·c++·qt·qobject
kangzerun3 天前
SQLiteManager:一个优雅的Qt SQLite数据库操作类
数据库·qt·sqlite
金刚狼883 天前
qt和qt creator的下载安装
开发语言·qt
追烽少年x3 天前
Qt中使用Zint库显示二维码
qt
谁刺我心3 天前
qt源码、qt在线安装器镜像下载
开发语言·qt
金刚狼883 天前
在qt creator中创建helloworld程序并构建
开发语言·qt
扶尔魔ocy4 天前
【转载】QT使用linuxdeployqt打包
开发语言·qt
YxVoyager4 天前
在VS2017中使用Qt的foreach宏,IntelliSense无法正确识别函数定义
c++·qt