Qt基础——获取QGraphicsScene的缩略图即导出到图片

QT之QGraphicsScene详细介绍 是 Qt GUI 库中的一个核心类,它是 QGraphicsView 的幕后数据模型,用于存储和管理二维图形元素。它可以容纳多种类型的图形项,包括但不限于基本形状(如矩形、圆形等)、图片、文本以及自定义的 QGraphicsItem 子类。关键特性:图形项管理:QGraphicsScene 负责管理其上的所有图形项,这些项可以通过调用 addXXX 方法(如 addRect、addEllipse 等)添加。事件处理:场景能捕获并处理来自鼠标和键盘的事件,然后将这些事件分发给相应的图形项,实现交互性。 阅读详情
是应用了他的render函数,render的作用是:
Renders the source rect from scene into target, using painter. This function is useful for capturing the contents of the scene onto a paint device, such as a QImage (e.g., to take a screenshot), or for printing with QPrinter. For 

If source is a null rect, this function will use sceneRect() to determine what to render. If target is a null rect, the dimensions of painter's paint device will be used.

The source rect contents will be transformed according to aspectRatioMode to fit into the target rect. By default, the aspect ratio is kept, and source is scaled to fit in target.

代码如下:
        //get thumbnail
        QImage image(130 * mSceneSize.width()/ mSceneSize.height(),130 ,QImage::Format_ARGB32);   
        QString pngName = currentPageID+"_scene.png";
        QPainter painter(&image);
        painter.setRenderHint(QPainter::Antialiasing);
        scene->render(&painter);   
        bool saveSuccess =  image.save(pngName);  
        Q_ASSERT(saveSuccess == true);

有两个注意事项:
  • 如果你把QImage image(130 * mSceneSize.width()/ mSceneSize.height(),130 ,QImage::Format_ARGB32);   写成QImage image。无论如何image都是无法save成功的。因为image没有初始化。
  • 如果你的scene里有的item/widget的坐标位于目前可显示的外面,意思是你的scene现在大小是100*100,但是有一个item的坐标位于100*101,那么调用scene->render时会有ASSERT错误:
    ---------------------------
    Microsoft Visual C++ Debug Library
    ---------------------------
    Debug Error!

    Program: ...\Win32\Debug\Maker.exe
    Module: 5.0.1
    File: global\qglobal.cpp
    Line: 1951

    ASSERT: "!item->d_ptr->itemDiscovered" in file graphicsview\qgraphicsscenebsptreeindex.cpp, line 343

    (Press Retry to debug the application)
    ---------------------------
    Abort   Retry   Ignore   
    ---------------------------
    你当然可以忽略掉他,在release模式下是没有此类问题的。

当然了你用QGraphicsView的render方法也可以获得view的缩略图。
QT中GraphicsView编程 QGraphicsItem是图元的基类。自定义图元,首先应该继承QGraphicsItem,然后重写他的两个纯虚公共函数boundingRect()和paint(),boundingRect()函数返回绘制图元大概的区域,paint()函数用来绘制图元内容。 阅读详情

相关推荐

基于Qt与C++的跨平台图片管理器开发实战:从架构设计到部署发布

在桌面应用开发领域,图形用户界面(GUI)框架的选择与架构设计是决定项目成败的关键。Qt作为一款成熟的跨平台C++框架,以其强大的信号与槽机制、丰富的控件库和“一次编写,到处编译”的特性,成为开发高性能本地应用的热门选择。其核心价值在于能够高效管理界面与业务逻辑,同时确保应用在Windows、macOS和Linux等不同操作系统上保持一致的体验和性能。在工程实践中,采用模型-视图(Model-View)架构能清晰分离数据管理与界面展示,这是构建可维护、可扩展应用的基础。对于涉及大量I/O操作(如本地的图片文

weixin_34315485的博客 442

qt 获取用户缩放_Qt QGraphics类应用——地图缩放选点

功能:1、地图缩放2、显示鼠标点经纬度需求:1、一张地图2、地图左上角经纬度和地图右下角经纬度成品:代码:mapwidget.h#ifndef MAPWIDGET_H#define MAPWIDGET_H#include #include #include class MapWidget : public QGraphicsView{Q_OBJECTpublic:MapWidget();void ...

weixin_35640673的博客 405

基于Qt C++的轻量级图片浏览器开发:从架构设计到性能优化

在桌面应用开发领域,GUI框架的选择与性能优化是核心议题。Qt作为成熟的跨平台C++框架,其信号槽机制和图形视图体系为构建高性能应用提供了坚实基础。通过Model-View架构实现业务逻辑与界面解耦,能显著提升代码可维护性和扩展性。在图像处理场景中,高效的内存管理与资源加载是关键的技术价值所在,直接影响应用的响应速度和用户体验。例如,利用LRU缓存策略管理图像资源,并结合异步加载机制,可以有效解决大文件I/O导致的界面卡顿问题。这些技术广泛应用于需要本地文件管理和快速图像预览的客户端软件,如相册管理、设计素

399

Qt图形视图框架:QGraphicsScene详解

一、描述 1、场景提供了一个用于管理大量2D图形项的平面。该类充当图形项的容器。 它与视图一起用于可视化2D曲面上的图形图形项。 2、场景没有自己的视觉外观,只负责管理图形项。 3、场景的最大优势之一就是其快速有效地定位图形项的能力。即使场景中有数百万个图形项。 4、场景的另一个职责是传播来自视图的事件。要将事件发送到场景,可以构造一个继承QEvent的事件,然后使用QApplication::sendEvent()将其发送。event()负责将事件调度到各个图形项。 二、类型成员 1、QGra

友善啊,朋友的博客 3万+

Qt与Halcon图像显示集成:从原理到实战的完整指南

在机器视觉与工业自动化领域,图像处理库与GUI框架的集成是构建一体化解决方案的核心技术。Halcon作为专业的机器视觉算法库,以其高效的图像处理能力著称,而Qt则是跨平台C++应用程序开发的主流框架。将两者结合,关键在于实现图像数据从Halcon的HObject到Qt的QImage/QPixmap的高效、无损转换,这涉及内存管理、数据布局对齐及高性能渲染等底层原理。掌握这项技术,能有效解决算法开发与软件界面分离导致的流程割裂问题,提升开发效率与软件稳定性。本文聚焦于**HImage到QImage的转换**及

weixin_34015336的博客 357

基于Qt QGraphicsView的图片标注工具设计与实现

在图形界面开发中,交互式绘图与标注是常见的需求,而Qt提供的Graphics View框架为处理复杂图形场景和用户交互提供了优雅的解决方案。该框架通过视图、场景与图形项的三层结构,将坐标变换、碰撞检测、选中事件等底层逻辑封装起来,极大地提升了开发效率和可扩展性。坐标映射是标注工具的核心,理解视图坐标、场景坐标与图像原始坐标的转换关系,才能确保标注数据的准确性。Graphics View的技术价值在于,它将每个标注对象建模为独立的图形项,支持灵活的样式定制和交互响应,广泛应用于图片标注、地图编辑、CAD等场景

weixin_34357436的博客 408

Qt图形视图框架核心原理与高性能实践

QGraphicsScene、QGraphicsView和QGraphicsItem构成Qt中唯一原生支持坐标变换、事件分发与空间索引的图形架构。其本质并非简单绘图工具,而是基于逻辑坐标系、四叉树索引与状态机设计的交互式图形系统。通过合理划分数据层(Scene)、表现层(View)与原子单元(Item),可高效支撑流程图编辑、电子地图缩放、Figma式图层管理等复杂场景。尤其在工业HMI、SCADA系统及嵌入式界面开发中,该框架凭借纯C++实现、零外部依赖与GUI线程安全机制,显著降低CPU占用并提升响应实

weixin_34409357的博客 400

基于Qt的电子相册系统设计与实现(Linux环境+嵌入式Mini2440)

默认情况下,支持基本的鼠标悬停与点击检测,但若要实现更复杂的交互行为(例如多选、拖拽排序、右键菜单触发),则需要继承该类并重写相关事件函数。关键在于正确处理和方法,并维护内部状态变量来追踪当前操作模式。下面是一个扩展自的自定义图像项类,支持边框高亮显示选中状态及拖拽移动:public:// 手动控制移动protected:update();} else {代码逻辑逐行解读与参数说明构造函数。

weixin_36427956的博客 1125

Qt与Halcon图像显示集成:从数据转换到高性能控件开发

在机器视觉与工业自动化软件开发中,跨平台GUI框架与专业图像处理库的集成是核心技术挑战。Qt作为主流的跨平台C++界面框架,Halcon作为强大的机器视觉算法库,二者的结合能构建出高性能、高交互性的视觉软件。其核心原理在于图像数据格式的转换与内存管理,Halcon的HObject图像数据需通过指针操作与内存拷贝,转换为Qt的QImage或QPixmap格式,并正确处理BGR/RGB通道顺序、存储格式(平面与交错)等关键细节。这一技术方案的价值在于实现了算法层与显示层的解耦,提升了软件架构的清晰度与可维护性,

weixin_30652491的博客 817

基于Qt的深度学习图像标注工具开源代码解析

图像标注是深度学习视觉任务中不可回避的基础环节,直接影响目标检测与语义分割模型的训练质量。要高效构建数据集,必须理解标注工具的核心原理,包括图形视图框架下的坐标映射、缩放交互以及数据格式转换逻辑。Qt作为跨平台C++框架,在图像渲染性能、离线部署能力和深度定制方面具有显著优势,常被用于工程化标注工具的研发。该工具支持VOC、COCO、YOLO等主流标注格式的导出,并可通过接口扩展至医学影像、工业质检等场景。本文将基于一款开源的Qt图像标注工具,解析其从设计思路、核心交互实现到二次开发的关键技术细节,为需要自

weixin_34242331的博客 436

基于Qt的图论算法可视化系统设计与实现

图论算法是数据结构与算法学习中的重点与难点,其动态执行过程往往难以通过静态文本直观理解。可视化技术通过动态呈现算法每一步的决策过程,能够有效降低学习门槛并加深对原理的认知。基于Qt的Graphics View框架,设计并实现了一套支持节点拖拽、边权编辑、动画播放的图论算法可视化系统,系统覆盖了Dijkstra最短路径、最小生成树、拓扑排序等经典算法。在架构上采用分层设计,将数据模型、算法逻辑与视觉呈现解耦,并通过帧序列机制实现算法动画的统一调度与播放控制。该系统适用于课堂教学演示、算法自学与Qt桌面应用开发

weixin_34009794的博客 457

基于Qt的深度学习图像标注工具开源:从设计到实现

在深度学习的数据准备阶段,图像标注工具的效率和稳定性直接影响项目进度。目标检测与语义分割等任务依赖高质量的标注数据,而通用标注软件在超大图像加载、格式兼容和交互效率上往往力不从心。Qt作为成熟的C++桌面框架,通过Graphics View体系为可编辑图形对象提供了稳定高效的处理能力,结合图像金字塔和坐标映射等底层原理,能够实现内存占用可控、交互流畅的标注应用。这类工具可广泛应用于遥感影像、病理切片等海量图像场景,帮助算法工程师快速构建Pascal VOC或YOLO格式的训练集。本文从技术原理出发,剖析一款

weixin_33901926的博客 370

基于Qt构建高效图像标注工具:核心架构与深度学习数据落地实践

在深度学习数据准备环节,图像标注工具的效率与格式兼容性直接决定了训练流程的顺畅程度。面对矩形框、多边形、多段线等多样化标注需求,基于Qt框架自研标注工具成为不少团队的务实选择。QGraphicsView提供的场景图模型能有效支撑图像与图元的分层渲染与交互,配合OpenCV完成高分辨率图像的加载与像素转换,再通过统一的JSON结构完成标注数据的序列化与格式转换,确保与YOLO、COCO等主流训练框架无缝对接。这类工具在工业缺陷检测、遥感目标识别、医学影像分析等场景中尤为关键,能够显著提升标注效率并减少数据清洗

weixin_34262482的博客 314
上一篇: 我所理解的设计模式(C++实现)——工厂方法模式(Factory Method Pattern)
下一篇: 我所理解的设计模式(C++实现)——抽象工厂模式(Abstract Factory Pattern)
十八道胡同
博客等级 码龄20年 848粉丝 109原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值