Qt学习08:文本输入类与快捷键

news2024/11/24 15:02:42

文章首发于我的个人博客:欢迎大佬们来逛逛

文章目录

  • QLineEdit
  • QTextEdit
    • QTextCursor
  • QPlainText
  • QKeySequenceEdit

QLineEdit

QLineEdit是最基本的输入控件,常用于短行的文本输入

请添加图片描述

构造函数

 QLineEdit(const QString &contents, QWidget *parent = nullptr)
 QLineEdit(QWidget *parent = nullptr)

继承自:**QObject**

常用基本功能函数:简单介绍几个:

  1. setEchoMode:设置文本的输入展示方式:QLineEdit::EchoMode
    1. Normal:正常显示
    2. NoEcho:不显示输入,但是实际上是接受的。
    3. Password:密码显示模式
    4. PasswordEchoOnEdit:编辑时显示,完成后切换为密码模式
  2. setCompleter:自动补全功能
  3. setInputMask:设置输入的格式化
  4. setDragEnabled:允许对文本的拖拽
void Widget::testQLineEdit()
{
    //创建行编辑框
    edit=new QLineEdit("我是编辑框",this);

    //设置文本
    edit->setText("edit");
    qInfo()<<edit->text();

    //清空文本
    edit->clear();

    //设置显示文本
    edit->setEchoMode(QLineEdit::EchoMode::Normal);

    //表面上是什么,实际就输出什么
    edit->displayText();

    //设置提示文本
    edit->setPlaceholderText("手机号/QQ/邮箱");

    //设置清空按钮
    edit->setClearButtonEnabled(true);

    //设置图标行为
    edit->addAction(QIcon("cha.png"),QLineEdit::ActionPosition::TrailingPosition);

    //设置自动补全
    QStringList compstr;
    compstr<<"123456"<<"zhangsan"<<"111122233";
    QCompleter* comp=new QCompleter(compstr,this);
    edit->setCompleter(comp);

    //限制输入长度
    edit->setMaxLength(5);

    //设置只读
    edit->setReadOnly(true);

    //设置验证器(用于输入验证)
    QIntValidator* valdator=new QIntValidator(0,100,this);
    edit->setValidator(valdator);

    //设置格式输入(输入按指定格式的文本)
    edit->setInputMask("AAAA-AAAA-AAAA-AAAA");

    edit->setText("123456789");

    //信号:textEdited文本编辑时触发
    //connect(edit,&QLineEdit::textEdited,this,[](const QString& str){qInfo()<<str;});

    //textChanged文本改变时触发,包括settext
    //connect(edit,&QLineEdit::textChanged,this,[](const QString& str){qInfo()<<str;});

    //回车触发
    connect(edit,&QLineEdit::returnPressed,this,[=](){qInfo()<<edit->text();});

    //编辑完成时触发
    //光标位置发生变化时
    //选择改变时
    connect(edit,&QLineEdit::selectionChanged,this,[=](){qInfo()<<edit->selectedText();});
}


信号:

 void cursorPositionChanged(int oldPos, int newPos) 光标位置改变
 void editingFinished()	编辑完成的时候
 void inputRejected()	输入完成的时候
 void returnPressed()	输入回车的时候
 void selectionChanged() 选择改变的时候
 void textChanged(const QString &text)	文本改变的时候(包括settext)
 void textEdited(const QString &text) 	文本编辑的时候(只包括手动的编辑修改)


QTextEdit

QTextEdit是文本输入区域,常用于长文本,继承自滑块类QAbstractScrollArea,因此他是一个具有滑动条的长文本编辑框。

构造函数:

 QTextEdit(const QString &text, QWidget *parent = nullptr)
 QTextEdit(QWidget *parent = nullptr)

QTextEdit不仅像QLineEdit支持普通文本的输入,还支持Html,markdown等文本的输入。

多种格式的输入:

//设置普通文本
tedit->setPlaceholderText("请输入你的简介"); 
//设置HTML
tedit->setHtml("<h1>999999daw,666</h1>");
//插入一个Html
tedit->insertHtml("<a href="https://helloylh.com"> 点击进入我的网站 </a>");
//设置MarkDown
tedit->setMarkdown("# 一级标题\\n - 选项一\\n - 选项二");

//自定义文本格式
QTextCursor cs=tedit->textCursor();
QTextCharFormat format;
format.setFontUnderline(true);
format.setUnderlineColor(Qt::green);
format.setForeground(Qt::blue);
cs.insertText("插入内容",format);

文本的获取:

//输出普通文本
qInfo()<<tedit->toPlainText();
//输出Html型文本
qInfo()<<tedit->toHtml();
//输出MarkDown型文本
qInfo()<<tedit->toMarkdown();


QTextCursor

QTextCursor提供了由简单到复杂的对文本的插入操作,简单来说,你可以通过QTextCursor来插入东西到QTextEdit文本框中。

首先获取文本光标:任何插入都是基于光标的

QTextEdit* tedit=new QTextEdit(this);
QTextCursor cursor=tedit->textCursor(); //获取指向tedit的光标

支持的插入操作的类包括:
QTextFormat
QTextBlockFormat
QTextCharFormat:QTextImageFormat ;QTextTableCellFormat
QTextFrameFormat:QTextTableFormat
QTextListFormat


插入普通文本:

cursor.insertText("Hello World");

插入带格式的复杂文本:(设置文本的格式)
QTextCharFormat :文本格式设置类,用它可以对文本的格式化进行设置,它里面包含了许多对文本格式的set,例如setFontUnderline设置下划线,setBackground设置背景颜色。。。setfont设置格式。。

//设置文本的格式
QTextCharFormat tcf;
tcf.setAnchor(Qt::red);
tcf.setFontUnderline(Qt::blue);
tcf.setBackground(QBrush(Qt::yellow));
cursor.insertText("666",tcf);

插入图片,设置图片的格式
QTextImageFormat :图片格式设置类。

//插入图片,设置图片格式
QTextImageFormat tif;
tif.setName("cha.png");
cursor.insertImage(tif,QTextFrameFormat::Position::InFlow);

插入一段话(文档内容)
QTextDocumentFragment:类

cursor.insertFragment(QTextDocumentFragment::fromHtml("<a href='<https://www.baidu.com>'>百度一下</a>"));

插入列表
QTextListFormat 列表类

//插入列表
QTextListFormat tlf;
cursor.insertList(tlf);

//列表的设置
QTextCursor tcur=tedit->textCursor();
QTextListFormat tlf;
tlf.setNumberPrefix("<");
tlf.setNumberSuffix(">");
tlf.setStyle(QTextListFormat::ListDecimal);
tcur.insertList(tlf);

插入表格
QTextTableFormat 类

//插入表格
QTextTableFormat ttf;
ttf.setCellPadding(10);
//ttf.setBackground(Qt::blue);
cursor.insertTable(3,4,ttf);


QPlainText

QPlainTextEdit是一个简略版本的类,它的性能优于QTextEdit

QPlainText和QTextEdit大致功能实现差不多

构造函数:

 QPlainTextEdit(const QString &text, QWidget *parent = nullptr)
 QPlainTextEdit(QWidget *parent = nullptr)

基本功能:

设置初始占位字符

ptext->setPlaceholderText("请输入200字以内检讨");

设置只读

ptext->setReadOnly(true);

设置输入文本格式

//设置文本的格式
QTextCharFormat tcf;
tcf.setAnchor(Qt::red);
tcf.setFontUnderline(Qt::blue);
tcf.setBackground(QBrush(Qt::yellow));

//插入格式
ptext->setCurrentCharFormat(tcf);
qInfo()<<ptext->currentCharFormat();

https://img-blog.csdnimg.cn/c98a9cb243a64af1bf5bd58378db183e.png

软换行:

ptext->setLineWrapMode(QPlainTextEdit::LineWrapMode::WidgetWidth);

没有软换行
QPlainTextEdit.NoWrap

超出控件宽度进行自动换行
QPlainTextEdit.WidgetWidth


输入操作:

setPlainText(text_str)
	设置普通文本内容
insertPlainText(text_str)
	插入普通文本
appendPlainText(text_str)
	追加普通文本
appendHtml(html_str)
	追加HTML字符串
	注意有些标签不支持
			表格
			列表
			图片
			...
toPlainText() -> 转换成纯文本

块数量;

blockCount() -> int
	当前块个数
maximumBlockCount() -> int
	最大块个数
setMaximumBlockCount(int)
	设置最大块个数

编辑操作:

selectAll()
		选中所有
	copy()
		复制选中文本
	cut()
		剪切选中文本
	paste()
		粘贴文本
		canPaste() -> bool
			判定是否可以粘贴
	clear()
		清空内容
	redo()
		重做
		isUndoRedoEnabled() -> bool
			判定撤销重做是否可用
		setUndoRedoEnabled(bool)
			设置撤销重做是否可用
	undo()
		撤销
	find(str, QTextDocument.FindFlags) -> bool
		QTextDocument.FindBackward
			向后搜索而不是向前搜索。
		QTextDocument.FindCaseSensitively
			默认情况下,查找工作区不区分大小写。
			指定此选项会将行为更改为区分大小写的查找操作。
		QTextDocument.FindWholeWords
			使查找匹配仅完整的单词。
	zoomIn(int range = 1)
		放大缩小
			range > 0
				放大
			range < 0
				缩小

信号:

	textChanged()
		文本改变时
	selectionChanged()
		选中内容改变时
	modificationChanged(bool)
		编辑状态改变时
	cursorPositionChanged()
		光标位置改变时
	blockCountChanged(int)
		块的个数发生改变时
	updateRequest(QRect rect, int dy)
		内容更新请求时
	copyAvailable(bool)
		复制可用时
	redoAvailable(bool)
		重做可用时
	undoAvailable(bool)
		撤销可用时


QKeySequenceEdit

请添加图片描述

QKeySequenceEdit是一个用于设计快捷键的类,当控件收到焦点时开始录制快捷键的按键情况,并在用户释放最后一个关键字后一秒钟结束录制,这个类通常与 快捷键的响应类一起使用:**QShortcut**

构造函数:
接受一个父窗口,同时可以直接传递一个默认的快捷键:使用:QKeySequence(“Ctrl+P”) 可以创建一个快捷键。

QKeySequenceEdit(const QKeySequence &keySequence, QWidget *parent = nullptr)
QKeySequenceEdit(QWidget *parent = nullptr)

QKeySequence类用来描述标准键位序列,里面提供了许多的标准键位供我们设置QKeySequenceEdit的快捷键消息。
例如:

QKeySequence::StandardKey::SelectAll 表示全选键: Ctrl + A

快捷键连接消息:
使用QShortcut

当我们往QKeySequenceEdit输入快捷键时(本例为Ctrl+Shift+F),就会激活QShortcut的activated的信号,表示快捷键激活,然后就会传递一个信号供槽函数接受。

当然不必每次都使用setkey来指定接受的快捷键,还可以直接在创建QShortcut对象时直接进行连接快捷键,如下面的操作。

void Widget::testQKeySequenceEdit()
{
    auto btn=new QPushButton(this);
    btn->move(200,0);
    connect(btn,&QPushButton::clicked,this,&Widget::onClicked);

    key = new QKeySequenceEdit(this);

    //相对于Widget窗口来说的快捷键设置
    QShortcut* st=new QShortcut(this);
    st->setKey(QKeySequence("Ctrl+Shift+A"));
    connect(st,&QShortcut::activated,this,&Widget::activated_Ctrl_Shift_A);

    new QShortcut(QKeySequence::StandardKey::SelectAll,this,[](){
        qInfo()<<"SelectAll 被激活";
    });
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/639336.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

07_scrapy的应用——获取电影数据(通过excel保存静态页面scrapy爬虫数据的模板/通过数据库保存)

0、前言: 一般我们自己创建的一些python项目,我们都需要创建虚拟环境,其中会下载很多包,也叫做依赖。但是我们在给他人分享我们的项目时,不能把虚拟环境打包发送给别人,因为每个人电脑系统不同,我们可以把依赖导出为依赖清单,然后别人有了我们的依赖清单,就可以用一条…

[网络工程师]-网络规划与设计-网络测试运行和维护(二)

4、局域网测试 局域网测试主要是检验网络是否为应用系统提供了稳定、高效的网络平台,如果网络系统不够稳定,网络应用就不可能快速稳定。对于常规的以太网进行系统测试,主要包括系统连通性、链路传输速率、吞吐率、传输时延、丢包率及链路层健康状况测试等基本功能测试。 4.…

用那种方式安装 ThinkPHP 5.0?

简单介绍 ThinkPHP是一个免费开源的&#xff0c;快速、简单的面向对象的轻量级PHP开发框架&#xff0c;是为了敏捷WEB应用开发和简化企业应用开发而诞生的。 ThinkPHP5.0版本是一个颠覆和重构版本&#xff0c;采用全新的架构思想&#xff0c;引入了更多的PHP新特性&#xff0c…

分享几个免费 AI 生成工具 (第一期)

今天来给大家分享几个国外免费的AI视频生成工具 Artflow ai https://app.artflow.ai Artflow.ai 是一款人工智能工具&#xff0c;旨在帮助用户创建自定义头像并让他们的故事栩栩如生。主要特点和优势包括&#xff1a; 自定义创作&#xff1a;从文本中生成角色、场景和声音&…

利用C语言实现十大经典排序算法的方法

排序算法 算法分类 —— 十种常见排序算法可以分为两大类&#xff1a; 比较类排序&#xff1a;通过比较来决定元素间的相对次序&#xff0c;由于其时间复杂度不能突破O(nlogn)&#xff0c;因此也称为非线性时间比较类排序。 非比较类排序&#xff1a;不通过比较来决定元素间…

《实战AI低代码》:一场新的软件工程革命

目录 五十年前的软件危机 二十年前的软件危机 今天的软件危机 革命性的新技术 AI低代码开发宣言 AI低代码开发原则 一场新的软件工程革命 AI低代码开发不仅是继面向过程,面向对象之后的一种新的抽象方式,也是继瀑布开发,敏捷开发之后的一种新的开发方法。 五十年前的…

QT学习07:五种按钮控件

文章首发于我的个人博客&#xff1a;欢迎大佬们来逛逛 文章目录 抽象类&#xff1a;QAbstractButtonQPushButtonQToolButtonQCommandLinkButtonQRadioButtonQCheckBoxQButtonGroup 抽象类&#xff1a;QAbstractButton 是所有按钮类的祖先。 QAbstractButton的信号&#xff1a…

【appium】appium自动化入门之API(中)

上一篇介绍了在appium上启动app和两个定位元素的小工具使用方法&#xff0c;这篇就从appium的一种小方法&#xff1a;远程控制&#xff0c;以及如何把appium上的输入法调整成中文&#xff0c;算是两个小技巧吧 目录 正文 2.4 Remote 远程控制 前言 2.4.1 设置 IP 2.4.2 访问地址…

OpenMMLab-AI实战营第二期-课程笔记-Class 3:RTMPose关键点检测

Class 3&#xff1a;RTMPose关键点检测 文章目录 Class 3&#xff1a;RTMPose关键点检测概述安装相关库为了方便使用者快速上手 MMPose&#xff0c;这次课程有着丰富的示例代码脚本&#xff0c;以及详细的技术文档&#xff0c;包括安装、数据集准备、使用教程、常见问题解答等。…

Pycharm+pytest+allure打造高逼格的测试报告

目录 前言&#xff1a; 1、安装allure 2、安装allure-pytest 3、一个简单的用例test_simpe.py 4、在pycharm底部打开terminal 5、用allure美化报告 6、查看报告 总结&#xff1a; 前言&#xff1a; 今天分享的内容&#xff1a;在Pycharmpytest基础上使用allure打造高逼格…

Spring注入

前言 向一个普通的类中注入数据有什么方法&#xff1f; set方法 构造方法 依赖注入描述了在容器之间建立bean与bean之间依赖关系的过程&#xff0c;如果bean运行需要的是数字或者字符串呢&#xff1f; 引用类型 基本数据类型与String 依赖注入方式 setter注入 简单类型…

HUAWEI悦盒ec6108v9c 如何刷成海纳思系统(家用低功耗服务器,使用Home Assistant服务)

环境&#xff1a; 1.HW悦盒ec6108v9c一套 2.16G U盘 3.格式化软件USB_format.exe 4.固件 mv100-mdmo1g-usb-flash.zip&#xff08;底层是Ubuntu 20.04系统&#xff09; 5.十字螺丝刀 6.翘片/薄铲子 7.有线网络环境 8.镊子/回形针 问题描述&#xff1a; 最近玩智能家居…

最近我面了15个人,发现这些测试人都有个通病

最近公司离职好几个测试&#xff0c;也是赶上程序员跳槽的多&#xff0c;老板叫我招2个测试进来。4天时间面了15个人&#xff0c;怎么说呢&#xff0c;基本上没有符合要求的&#xff0c; 也没别的意思&#xff0c;因为我们公司小&#xff0c;开的薪水也不高&#xff0c;所以来…

Oracle中xmltype类型toObject函数用法实例

Oracle中xmltype类型toObject函数用法总结。 用法总结 xmltype是oracle中的type object类型。在实际使用中&#xff0c;可以当做xml对象来使用&#xff1a; set serveroutput ondrop type person_typex; create type person_typex is object (name varchar2(32),age number …

每天一道大厂SQL题【Day25】脉脉真题实战(一)每日活跃用户

文章目录 每天一道大厂SQL题【Day25】脉脉真题实战(一)每日活跃用户每日语录第25题&#xff1a;1. 需求列表1. 初级题: 每日活跃用户 思路分析(1) 创建表(2) 思路 答案获取加技术群讨论附表文末SQL小技巧 后记 每天一道大厂SQL题【Day25】脉脉真题实战(一)每日活跃用户 大家好…

【React】路由,Hooks

❤️ Author&#xff1a; 老九 ☕️ 个人博客&#xff1a;老九的CSDN博客 &#x1f64f; 个人名言&#xff1a;不可控之事 乐观面对 &#x1f60d; 系列专栏&#xff1a; 文章目录 路由Navigate导航组件 路由的嵌套useNavigate路由传递参数route配置抽取 路由 通过Link组件就可…

AntDB 事务机制

全局一致性 AntDB 的集群架构包括&#xff0c;一个 GTM&#xff08;Global Transaction Manager&#xff09;、多个Coordinator&#xff08;CN&#xff09;、多个 Datanode&#xff08;DN&#xff09;。其中 GTM 负责给其他的 DN 和CN 分发集群全局唯一的事务号和集群当前判断…

QT--配置Opencv

提示&#xff1a;本文为学习记录&#xff0c;若有疑问&#xff0c;请及时联系作者。 文章目录 前言一、下载已编译的opencv1..解压2..path路径 二、使用步骤1..pro文件2..h文件 总结 前言 只做第一个我&#xff0c;不做第二个谁。 一、下载已编译的opencv 适用于mingw编译器…

如何学习数据结构与算法? - 易智编译EaseEditing

学习和提升数据结构与算法的能力可以通过以下几个步骤&#xff1a; 学习基础知识&#xff1a; 了解数据结构和算法的基本概念和原理&#xff0c;包括常见的数据结构&#xff08;如数组、链表、栈、队列、树、图等&#xff09;和算法&#xff08;如排序、搜索、图算法等&#…

GreenPlum监控工具GPCC部署

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…