qt QUndoView详解
1、概述
QUndoView 是 Qt 框架中用于显示 QUndoStack(撤销堆栈)内容的视图类。它通常与 QUndoStack 一起使用,为用户提供了一个可视化的界面来查看和操作撤销/重做历史。QUndoView 可以显示堆栈中的每个命令,并允许用户通过界面进行撤销或重做操作。
2、重要方法
QUndoStack *stack() const:返回此视图所显示的QUndoStack。void setStack(QUndoStack *stack):设置此视图要显示的QUndoStack。void setCleanIcon(const QIcon &icon)和QIcon cleanIcon() const:设置和获取表示堆栈为干净状态时的图标。void setUndoIcon(const QIcon &icon)和QIcon undoIcon() const:设置和获取表示撤销操作的图标。void setRedoIcon(const QIcon &icon)和QIcon redoIcon() const:设置和获取表示重做操作的图标。- void setGroup(QUndoGroup *group):设置视图显示的撤销组。
- QUndoGroup *group():返回当前视图显示的撤销组。
此外,QUndoView 还继承了 QAbstractItemView 的许多方法,这些方法允许你进一步定制视图的外观和行为。
MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow),undoGroup(new QUndoGroup(this)),tabWidget(new QTabWidget(this)),undoView(new QUndoView(undoGroup, this))
{ui->setupUi(this);setCentralWidget(tabWidget);QMenu *fileMenu = menuBar()->addMenu(tr("&File"));QAction *newAction = fileMenu->addAction(tr("&New Document"), this, &MainWindow::newDocument);fileMenu->addAction(tr("do"), this, [&]{handleTextChanged();});QMenu *editMenu = menuBar()->addMenu(tr("&Edit"));QAction *undoAction = undoGroup->createUndoAction(this, tr("&Undo"));QAction *redoAction = undoGroup->createRedoAction(this, tr("&Redo"));editMenu->addAction(undoAction);editMenu->addAction(redoAction);QDockWidget *dockWidget = new QDockWidget(("Undo History"), this);dockWidget->setWidget(undoView);// 添加撤销视图到主窗口addDockWidget(Qt::RightDockWidgetArea, dockWidget);
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::newDocument()
{QTextEdit *textEdit = new QTextEdit(this);QUndoStack *undoStack = new QUndoStack(this);undoGroup->addStack(undoStack);undoGroup->setActiveStack(undoStack);int tabIndex = tabWidget->addTab(textEdit, tr("Document %1").arg(tabWidget->count() + 1));tabWidget->setCurrentIndex(tabIndex);connect(undoStack, &QUndoStack::indexChanged, [=](int idx) {textEdit->setWindowTitle(tr("Document %1 (modified)").arg(tabIndex + 1));});
}void MainWindow::handleTextChanged()
{QTextEdit *textEdit = qobject_cast<QTextEdit *>(tabWidget->currentWidget());if (textEdit){QString text = textEdit->toPlainText();QUndoStack *undoStack = undoGroup->stacks().at(tabWidget->currentIndex());if(undoStack){qDebug() << "undoStack";undoStack->push(new TextEditCommand(textEdit, text));}}
}TextEditCommand::TextEditCommand(QTextEdit *textEdit, const QString &text): m_textEdit(textEdit), m_text(text)
{setText(text);
}void TextEditCommand::undo()
{qDebug() << "undo";m_textEdit->setText(m_text);
}void TextEditCommand::redo()
{qDebug() << "redo";m_textEdit->setText(m_text);
}


觉得有帮助的话,打赏一下呗。。

相关文章:
qt QUndoView详解
1、概述 QUndoView 是 Qt 框架中用于显示 QUndoStack(撤销堆栈)内容的视图类。它通常与 QUndoStack 一起使用,为用户提供了一个可视化的界面来查看和操作撤销/重做历史。QUndoView 可以显示堆栈中的每个命令,并允许用户通过界面进…...
python+智谱AI-实现钉钉消息自动回复
python智谱AI-实现钉钉消息自动回复 实现了电脑窗口切换,截图识别未读消息,与语言模型交互后,将答案带入到钉钉窗口中。偷个懒,直接贴代码了,后续不断完善注释,如果遇到读不懂的地方,欢迎交流。…...
Kafka-Eagle的配置——kafka可视化界面
通过百度网盘分享的文件:kafka-eagle-bin-2.0.8.tar.gz 链接:https://pan.baidu.com/s/1H3YONkL97uXbLTPMZHrfdg?pwdsltu 提取码:sltu 一、界面展示 二、软件配置 1、关闭kafka集群 kf.sh stop 2、将该软件上传到/opt/modules下 cd /opt…...
【命令操作】Linux上带宽流量监控nethogs命令详解 _ 统信 _ 麒麟 _ 方德
原文链接:【命令操作】Linux上带宽流量监控nethogs命令详解 | 统信 | 麒麟 | 方德 Hello,大家好啊!今天带来一篇关于Linux上nethogs命令详解的文章。nethogs是一款非常实用的网络流量监控工具,帮助用户实时查看系统中每个进程的网…...
【入门篇】数字统计——多语言版
题目跳转:数字统计 题目解析: 这道题目要求统计在给定范围 [L, R] 内所有整数中数字 2 出现的次数。例如,在范围 [2, 22] 中,数字 2 分别在数 2、12、20、21、22 中出现的次数,最终出现了6次。 题目的输入为两个正…...
探索那些现代C++语法糖
本文来聊聊现代C的一些语法糖。 1.Auto auto x 10; // 推导为 int auto y 3.14; // 推导为 double2.范围-based for 循环 std::vector<int> v {1, 2, 3, 4, 5}; for (auto val : v) {std::cout << val << " "; }3.nullptr int* ptr nullpt…...
【LeetCode】【算法】33. 搜索旋转排序数组
LeetCode 33. 搜索旋转排序数组 题目描述 整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 < k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k…...
Python小游戏25——黄金矿工
首先,你需要安装Pygame库。 如果你还没有安装,可以使用以下命令进行安装: 【bash】 pip install pygame 【python】代码展示 import pygame import random # 初始化Pygame pygame.init() # 设置屏幕尺寸 screen_width 800 screen_height 60…...
WPF中Prism框架中 IContainerExtension 和 IRegionManager的作用
在Prism框架中,IContainerExtension和IRegionManager扮演着重要的角色,具体作用如下: IContainerExtension IContainerExtension接口是Prism 7中引入的,用于抽象依赖注入容器的操作。它实现了IContainerProvider和IContainerReg…...
C++实现用户分组--学习
第一步实现:ETL的设计分三部分:数据抽取(Data Extraction)、数据的清洗转换(Data Transformation)、数据的加载(Data Loading). 构建一个数据容器类,其中包含转换后的MNIST手写数据。还实现了一个数据处理程序,该数据处理程序将提…...
鸿蒙华为商城APP案例
模拟器运行效果如下: 鸿蒙版APP-华为商城-演示视频...
回首遥望-C++内存对齐的思考
这一章节主要巩固一下学习C/C时内存对齐相关的内容! 文章目录 什么是内存对齐?为什么要有内存对齐?如何进行内存对齐?致谢: 什么是内存对齐? 这里不提及一堆啰嗦概念,就结合实际出发࿰…...
力扣 LeetCode 704. 二分查找(Day1:数组)
解题思路: 二分查找主要分为[ left , right ]左闭右闭和[ left , right )左闭右开两种 此处采取[ left , right ]左闭右闭写法 注意: 1. right的初始化取值 2. while中取等 3. right mid -1 ; class Solution {public int search(int[] nums, i…...
【Mode Management】AUTOSAR架构下唤醒源检测函数EcuM_CheckWakeup详解
目录 前言 正文 1.AUTOSAR标准描述 1.1 EcuM_CheckWakeup用来干什么 1.2 EcuM_CheckWakeup在哪里被调用 1.3 EcuM_CheckWakeup的使用场景 1.3.1 GPT中断检测唤醒源 1.3.2 EcuM轮询GPT检测唤醒源 1.3.3 ICU中断检测唤醒源 1.3.4 其他 2.AUTOSR工具相关配置 3.唤醒源…...
Zabbix基础信息概述
1.Zabbix概述 Zabbix 是一款能够监控各种网络参数以及服务器健康性和完整性的软件。Zabbix 使用灵活的通知机制,允许用户为几乎任何事件配置基于邮件的告警,这样可以快速反馈服务器的问题。基于已存储的数据,Zabbix 提供了出色的报告和数据可…...
SpringBoot(十二)SpringBoot配置redis
接下来我要实现的webscoket即时聊天中需要使用到redis,我先在项目中配置一下redis。 我这里再windows中做测试,关于redis的安装请移步《Redis(三)Windows系统安装redis》 一:在pom.xml中添加依赖 <!-- springboot redis start --><dependency><grou…...
Pycharm安装
Pycharm安装 返回主目录Pycharm安装1. Pycharm下载PyCharm官网下载地址下载安装包 2. Pycharm安装第一步:双击安装包第二步:进入安装程序第三步:选择安装路径第四步:选择安装选项第五步:安装第六步:完成安装…...
OpenAI大改下代大模型方向,scaling law撞墙?AI社区炸锅了
有研究预计,如果 LLM 保持现在的发展势头,预计在 2028 年左右,已有的数据储量将被全部利用完。届时,基于大数据的大模型的发展将可能放缓甚至陷入停滞。 来自论文《Will we run out of data? Limits of LLM scaling based on hum…...
技术整合与生态构建:Lyft与Mobileye引领自动驾驶新纪元
在科技日新月异的今天,自动驾驶技术正逐渐从科幻电影走进现实生活,成为出行服务领域的一股不可忽视的力量。近日,北美网约车巨头Lyft与自动驾驶技术领先者Mobileye宣布联手合作,共同推动自动驾驶汽车出行服务的广泛商业化进程。此…...
利用huffman树实现对文件A先编码后解码
利用huffman树实现对文件A先编码后解码,范围为ASCII码0-255的值,如何解决特殊符号问题是一个难点,注意应使用unsigned char存储数据,否则ASCII码128-255的值可能会出问题: #define _CRT_SECURE_NO_WARNINGS 1 #includ…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
