当前位置: 首页 > article >正文

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

前言

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

lineEdit->setMaxLength(10);

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

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

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

效果图

代码实现

 

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

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

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


http://www.kler.cn/a/289861.html

相关文章:

  • Spring——事务
  • 在JPA和EJB中用乐观锁解决并发问题
  • JavaScript 观察者设计模式
  • 【计算机网络】【传输层】【习题】
  • ubuntu连接orangepi-zero-2w桌面的几种方法
  • Django基础用法+Demo演示
  • AWS SES服务 Golang接入教程(排坑版)
  • ubuntu20.04安装k8sv1.26完整篇
  • Source-code-of-charging-云快充协议1.5+互联互通协议+新能源汽车充电桩系统
  • 基于mediamtx+ffmpeg实现视频推流,基于python-deffcode实现视频拉流
  • 在Vision Pro上实现360度全景视频播放:HLS360VideoMaterial框架介绍
  • Python 在网络运维方面的自动化应用实例
  • sqlserver 如何收缩+最大化压缩数据库
  • git无法pull仓库refusing to merge unrelated historie
  • 【APP自动化】Appium 环境搭建
  • JVM4-运行时数据区
  • 【论文阅读】:Mamba YOLO SSMs-Based YOLO For Object Detection
  • 计算机网络:http协议
  • 代码随想录 -- 二叉树 -- 二叉树的递归遍历
  • 13、Django Admin创建两个独立的管理站点
  • 【C++ Primer Plus习题】10.1
  • php邮箱服务器怎么搭建?如何构建服务器?
  • 【重学MySQL】四、关系型数据库设计规则
  • 在react中要将页面跳转有动画
  • 139. 单词拆分
  • 在线音乐播放器项目