《QT实用小工具·四十四》支持图片和动图的文本编辑器

2024-04-28 06:12

本文主要是介绍《QT实用小工具·四十四》支持图片和动图的文本编辑器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、概述
源码放在文章末尾

该项目实现了一个功能丰富的文本编辑器,除了包含文本常规的编辑功能,还包括图片的插入功能和动图的插入功能,项目demo演示如下所示:
在这里插入图片描述

项目部分代码如下所示:

#include "imagehelper.h"#include <QFile>
#include <QFileInfo>
#include <QQmlFile>
#include <QQuickTextDocument>
#include <QDebug>Api::Api(QObject *parent): QObject(parent)
{
}bool Api::exists(const QString &arg)
{return QFile::exists(arg);
}QString Api::baseName(const QString &arg)
{return QFileInfo(arg).baseName();
}ImageHelper::ImageHelper(QObject *parent): QObject(parent),m_maxWidth(120),m_maxHeight(120)
{}ImageHelper::~ImageHelper()
{cleanup();
}void ImageHelper::insertImage(const QUrl &url)
{QImage image = QImage(QQmlFile::urlToLocalFileOrQrc(url));if (image.isNull()){qDebug() << "不支持的图像格式";return;}QString filename = url.toString();QString suffix = QFileInfo(filename).suffix();if (suffix == "GIF" || suffix == "gif") //如果是gif,则单独处理{QString gif = filename;if (gif.left(4) == "file")gif = gif.mid(8);else if (gif.left(3) == "qrc")gif = gif.mid(3);textCursor().insertHtml("<img src='" + url.toString() + "' width = " +QString::number(qMin(m_maxWidth, image.width())) + " height = " +QString::number(qMin(m_maxHeight, image.height()))+ "/>");textDocument()->addResource(QTextDocument::ImageResource, url, image);if (m_urls.contains(url))return;else{QMovie *movie = new QMovie(gif);movie->setCacheMode(QMovie::CacheNone);connect(movie, &QMovie::finished, movie, &QMovie::start);   //循环播放connect(movie, &QMovie::frameChanged, this, [url, this](int){QMovie *movie = qobject_cast<QMovie *>(sender());textDocument()->addResource(QTextDocument::ImageResource, url, movie->currentPixmap());emit needUpdate();});m_urls[url] = movie;movie->start();}}else{        QTextImageFormat format;format.setName(filename);format.setWidth(qMin(m_maxWidth, image.width()));format.setHeight(qMin(m_maxHeight, image.height()));textCursor().insertImage(format, QTextFrameFormat::InFlow);}
}void ImageHelper::cleanup()
{for (auto it : m_urls)it->deleteLater();m_urls.clear();
}QQuickTextDocument* ImageHelper::document() const
{return  m_document;
}void ImageHelper::setDocument(QQuickTextDocument *document)
{if (document != m_document){m_document = document;emit documentChanged();}
}int ImageHelper::cursorPosition() const
{return m_cursorPosition;
}void ImageHelper::setCursorPosition(int position)
{if (position != m_cursorPosition){m_cursorPosition = position;emit cursorPositionChanged();}
}int ImageHelper::selectionStart() const
{return m_selectionStart;
}void ImageHelper::setSelectionStart(int position)
{if (position != m_selectionStart){m_selectionStart = position;emit selectionStartChanged();}
}int ImageHelper::selectionEnd() const
{return m_selectionEnd;
}void ImageHelper::setSelectionEnd(int position)
{if (position != m_selectionEnd){m_selectionEnd = position;emit selectionEndChanged();}
}int ImageHelper::maxWidth() const
{return m_maxWidth;
}void ImageHelper::setMaxWidth(int max)
{if (max != m_maxWidth){m_maxWidth = max;emit maxWidthChanged();}
}int ImageHelper::maxHeight() const
{return m_maxHeight;
}void ImageHelper::setMaxHeight(int max)
{if (max != m_maxHeight){m_maxHeight = max;emit maxHeightChanged();}
}QTextDocument* ImageHelper::textDocument() const
{if (m_document)return m_document->textDocument();else return nullptr;
}QTextCursor ImageHelper::textCursor() const
{QTextDocument *doc = textDocument();if (!doc)return QTextCursor();QTextCursor cursor = QTextCursor(doc);if (m_selectionStart != m_selectionEnd){cursor.setPosition(m_selectionStart);cursor.setPosition(m_selectionEnd, QTextCursor::KeepAnchor);}else{cursor.setPosition(m_cursorPosition);}return cursor;
}

源码下载

这篇关于《QT实用小工具·四十四》支持图片和动图的文本编辑器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/942482

相关文章

揭秘未来艺术:AI绘画工具全面介绍

📑前言 随着科技的飞速发展,人工智能(AI)已经逐渐渗透到我们生活的方方面面。在艺术创作领域,AI技术同样展现出了其独特的魅力。今天,我们就来一起探索这个神秘而引人入胜的领域,深入了解AI绘画工具的奥秘及其为艺术创作带来的革命性变革。 一、AI绘画工具的崛起 1.1 颠覆传统绘画模式 在过去,绘画是艺术家们通过手中的画笔,蘸取颜料,在画布上自由挥洒的创造性过程。然而,随着AI绘画工

墨刀原型工具-小白入门篇

墨刀原型工具-小白入门篇 简介 随着互联网的发展和用户体验的重要性越来越受到重视,原型设计逐渐成为了产品设计中的重要环节。墨刀作为一款原型设计工具,以其简洁、易用的特点,受到了很多设计师的喜爱。本文将介绍墨刀原型工具的基本使用方法,以帮助小白快速上手。 第一章:认识墨刀原型工具 1.1 什么是墨刀原型工具 墨刀是一款基于Web的原型设计工具,可以帮助设计师快速创建交互原型,并且可以与团队

大学湖北中医药大学法医学试题及答案,分享几个实用搜题和学习工具 #微信#学习方法#职场发展

今天分享拥有拍照搜题、文字搜题、语音搜题、多重搜题等搜题模式,可以快速查找问题解析,加深对题目答案的理解。 1.快练题 这是一个网站 找题的网站海量题库,在线搜题,快速刷题~为您提供百万优质题库,直接搜索题库名称,支持多种刷题模式:顺序练习、语音听题、本地搜题、顺序阅读、模拟考试、组卷考试、赶快下载吧! 2.彩虹搜题 这是个老公众号了 支持手写输入,截图搜题,详细步骤,解题必备

JAVA读取MongoDB中的二进制图片并显示在页面上

1:Jsp页面: <td><img src="${ctx}/mongoImg/show"></td> 2:xml配置: <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001

公共筛选组件(二次封装antd)支持代码提示

如果项目是基于antd组件库为基础搭建,可使用此公共筛选组件 使用到的库 npm i antdnpm i lodash-esnpm i @types/lodash-es -D /components/CommonSearch index.tsx import React from 'react';import { Button, Card, Form } from 'antd'

(超详细)YOLOV7改进-Soft-NMS(支持多种IoU变种选择)

1.在until/general.py文件最后加上下面代码 2.在general.py里面找到这代码,修改这两个地方 3.之后直接运行即可

Windows/macOS/Linux 安装 Redis 和 Redis Desktop Manager 可视化工具

本文所有安装都在macOS High Sierra 10.13.4进行,Windows安装相对容易些,Linux安装与macOS类似,文中会做区分讲解 1. Redis安装 1.下载Redis https://redis.io/download 把下载的源码更名为redis-4.0.9-source,我喜欢跟maven、Tomcat放在一起,就放到/Users/zhan/Documents

在服务器上浏览图片

@StarSky 2018-10-26 15:09 字数 15971 阅读 28 https://www.zybuluo.com/StarSky/note/1294871 来源 2018-09-27 线上服务器安装 imgcat Tool   2018-09-27 线上服务器安装 imgcat 0. 准备文件:iterm2_shell_integration.bash1. 在有权限

OpenCompass:大模型测评工具

大模型相关目录 大模型,包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步,扬帆起航。 大模型应用向开发路径:AI代理工作流大模型应用开发实用开源项目汇总大模型问答项目问答性能评估方法大模型数据侧总结大模型token等基本概念及参数和内存的关系大模型应用开发-华为大模型生态规划从零开始的LLaMA-Factor

简鹿文件批量重命名:一款文件批量改名高手都在用的工具

作为 IT 行业的搬砖民工,互联网的数据量爆炸性增长,文件管理成为了一项日益重要的任务。"简鹿文件批量重命名"应运而生,旨在为用户提供一个高效、灵活的解决方案,以应对繁琐的文件命名、排序、创建及属性修改等挑战。 这款软件凭借其一键式操作、强大的自定义规则导入、以及全面的批量处理能力,极大地简化了文件管理流程,尤其适合处理大量文件的个人用户及企业环境,是提高工作效率、保持文件系统整洁的得力助手