Qt小例子学习75 - 把QGraphicsItem 保存到文本然后读出来显示_qt qgraphicspathitem 保存 读取saveitem-程序员宅基地

技术标签: Qt小例子  

Qt小例子学习75 - 把QGraphicsItem 保存到文本然后读出来显示

#include "utils.h"

#include <QApplication>
#include <QDebug>
#include <QFile>
#include <QGraphicsLineItem>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QTimer>

int main(int argc, char *argv[])
{
    
    QApplication a(argc, argv);

    QGraphicsView view(new QGraphicsScene);

    QGraphicsEllipseItem *eitem = view.scene()->addEllipse(
                                      QRect(10, 10, 80, 50), QPen(Qt::green), QBrush(Qt::black));
    eitem->setPos(100, 10);
    eitem->setRotation(60);

    QGraphicsLineItem *litem =
        view.scene()->addLine(QLineF(0, 0, 100, 100), QPen(Qt::red));
    litem->setPos(10, 10);
    litem->setRotation(100);

    QGraphicsRectItem *ritem = view.scene()->addRect(
                                   QRect(10, 0, 100, 100), QPen(Qt::blue), QBrush(Qt::red));
    ritem->setPos(10, 100);
    ritem->setRotation(10);

    QPainterPath path;
    path.moveTo(100, 100);
    path.lineTo(10, 0);
    path.addRect(QRect(0, 0, 100, 22));
    QGraphicsPathItem *pitem =
        view.scene()->addPath(path, QPen(Qt::green), QBrush(Qt::black));
    pitem->setPos(100, 22);
    pitem->setRotation(120);

    QGraphicsPixmapItem *pixmapitem = new QGraphicsPixmapItem;
    pixmapitem->setPixmap(QPixmap(":/image.png"));
    view.scene()->addItem(pixmapitem);

    QGraphicsItem::GraphicsItemFlags flags =
        QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable |
        QGraphicsItem::ItemIsFocusable | QGraphicsItem::ItemClipsToShape |
        QGraphicsItem::ItemClipsChildrenToShape;

    for (QGraphicsItem *it : view.scene()->items())
    {
    
        it->setFlags(flags);
    }

    QTimer::singleShot(4000, [&view]()
    {
    
        qDebug() << "writing ...";
        QFile fileOut("file.txt");
        if (fileOut.open(QIODevice::WriteOnly))
        {
    
            QDataStream out(&fileOut);
            saveItems(view.scene()->items(), out);
            fileOut.close();
            qDebug() << "clear items";
            view.scene()->clear();
        }
    });

    QTimer::singleShot(5000, [&view]()
    {
    
        qDebug() << "reading ...";
        QFile fileIn("file.txt");
        if (fileIn.open(QIODevice::ReadOnly))
        {
    
            QDataStream in(&fileIn);
            QList<QGraphicsItem *> items = readItems(in);
            for (QGraphicsItem *item : items)
            {
    
                view.scene()->addItem(item);
            }
        }
    });

    view.show();
    return a.exec();
}

在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/TM1695648164/article/details/119698280

智能推荐

CAN总线的物理层分析(三)_can物理层需求分析-程序员宅基地

文章浏览阅读2.4k次。一、CAN拓扑网络连接在CAN总线上的设备叫做节点设备(CAN Node),CAN网络的拓扑一般为线型。线束最常用的是双绞线,线上传输为对称的差分电平信号。下图为CAN总线网络示意图,节点主要包括Host、控制器和收发器。Host常集成有CAN控制器,CAN控制器负责处理协议相关功能,以减轻Host的负担。CAN收发器将控制器连接到传输媒介。通常控制器和总线收发器通过光耦或磁耦隔离,这样即使总..._can物理层需求分析

2020解读中国互联网:局部领先、快进的数字化发展_解读中国互联网:局部领先-程序员宅基地

文章浏览阅读133次。局部领先的当前格局:中国互联网特色分明,部分领域世界领先应对不确定性,是未来十年数字经济发展的重要命题。突如其来的新冠疫情为全球发展秩序带来了巨大的不确定性,政府、企业和个体迅速进入了一场全社会参与的数字化实验,以数字化作为应对不确定性的有效方针。在全社会数字化的进程中,中◿互联网“数智化”的步伐加快,呈现以下特色格局:在产业端,局部领先全球:产业互联网发展水平在不同行业差异明显。在需求端个性化程度高且供给端分散的行业,例如餐饮、服饰等,数字化程度已开始引领全球,互联网巨头赋能行业供应链各环节的B端企业_解读中国互联网:局部领先

关于Linux如何加入windows创建的域_linux账户验证使用windows域 活动目录-程序员宅基地

文章浏览阅读2.7k次,点赞2次,收藏11次。一、场景描述在某系统微服务改造中,在某windows域环境下,创建了3台Linux 虚拟机来进行功能性验证,为更好地彼此间信任和融合域环境,需要将Linux虚拟机加入到现有的Windows域内,那如何实施呢,本次将对此进行讨论阐述。回顾AD 域验证过程:自 Windows 2000 以来,AD 一直是 Windows 的身份验证和目录服务,AD 基于 LDAP 实现其功能,其使用 DNS 进行主机名的解析,使用 Kerberos V5 进行用户身份验证,使用 LDAP V3 进行统一的帐户管理。二、常_linux账户验证使用windows域 活动目录

qt设计为磨砂玻璃效果_Pixyz的2020.1更新为数据准备带来了磨砂和光泽-程序员宅基地

文章浏览阅读753次。qt设计为磨砂玻璃效果For their 2020.1 release, our partners at Pixyz have focused on improvements ranging from core geometry capabilities and new import formats to visualization and user interface enhancements...._qt将图片添加毛玻璃效果

网络协议 (三) Http1.0 vs Http1.1 vs Http2.0 (应用层)_http1.0和http1.1哪个占用资源-程序员宅基地

文章浏览阅读2.1k次。这篇文章会从下面几个维度来对比 HTTP 1.0 和 HTTP 1.1:响应状态码 缓存处理 连接方式 Host头处理 带宽优化1. 响应状态码Http1.1 与 Http1.0 相比,新加入了大量的状态码。2. 缓存处理Http1.0 中的缓存机制非常简单,服务端使用 Expires 标签来标识一个相应体,在 Expires 标志的时间内的所有请求,获得的都会是缓存。服务端 初次返回给 客户端 的响应体中,会有一个 Last-Modified 标签,该标签标记了被请求资源在_http1.0和http1.1哪个占用资源

随便推点

网站显示不出来,怎么排查?_网站访问不了抓包判断-程序员宅基地

文章浏览阅读954次。网站显示不出来,怎么排查?_网站访问不了抓包判断

【无标题】_stm32 串口 tc标志位可以自动清0-程序员宅基地

文章浏览阅读629次。一:STM32的外部中断类型:外部中断分为两部分,初始化和处理。1. 外部中断初始化项目  分三部分:GPIO、通用中断、EXTI(External interrupt/event controller)1.1. GPIO:时钟、端口、引脚、输入模式 时钟:需要同时使能GPIO时钟 引脚:需要选择指定的引脚 输入模式:一般选择浮空输入 1.2. 通用中断:优先级分组、中断源、优先级、使能 优先级分组:设定合适的优先级分组 中断源:选择指定的EXT_stm32 串口 tc标志位可以自动清0

Spring Data JPA关于懒加载的那些事_jpa fetchtype.lazy-程序员宅基地

文章浏览阅读389次。另外 OSIV 将 service 层的技术细节暴露到了 controller 层,造成了一定的耦合,因而不建议开启,对应的解决方案就是在 controller 层中使用 response,而非 detached 状态的 entity,所需的数据不再依赖延时加载,在组装 response 的时候根据需要显式查询。至于为什么要用懒加载呢,就是当我们要访问的数据量过大时,明显用缓存不太合适,因为内存容量有限 ,为了减少并发量,减少系统资源的消耗,我们让数据在需要的时候才进行加载,这时我们就用到了懒加载。_jpa fetchtype.lazy

统计学习方法——模型与问题分类_统计模型分类-程序员宅基地

文章浏览阅读3.7k次,点赞2次,收藏8次。0. 写在前面在这一讲中,我们主要介绍一下模型的类别以及问题的类别,并对课后习题进行相应的分析。1. 模型的类型我们知道,统计学习主要包括监督学习、非监督学习、半监督学习和强化学习。那么在统计学习方法一书中主要涉及的是监督学习。而监督学习主要分为两类,一种是生成模型,一种是判别模型。1. 生成模型生成模型是由数据学习联合概率分布P(X,Y),然后求出条件概率分布P(Y|X)作为预测模型,其样子为:_统计模型分类

敏捷项目经理_敏捷项目经理需要关注的11个领域-程序员宅基地

文章浏览阅读293次。敏捷项目经理 在我以前的文章中,我重点介绍了一个伟大的软件开发人员 的态度和一个伟大的软件测试 人员 的态度 。 敏捷项目的成功也很大程度上取决于敏捷项目经理。 他做出的决定以及他对某些领域的重视将为成功的敏捷项目铺平道路。 在本文中,我提供了敏捷项目经理应该关注的一些关键点,以改善敏捷项目。 员工招聘 首先,敏捷项目经理需要为项目雇用合适的人员。 技术和非技术修饰 进入项目后,..._敏捷经理

Python教程——Python本地环境安装_python3.10.11安装教程-程序员宅基地

文章浏览阅读2k次,点赞3次,收藏8次。Python 是 Guido van Rossum 于 1989 年发明,Python 源码遵循 GPL(GNU General Public License)协议。Python 是一个高层次的结合了解释性、编译性、互动性和面向对象解释型语言:这意味着开发过程中没有了编译这个环节。类似于 PHP 和 Perl 语言。交互式语言: 这意味着,您可以在 Python 提示符>>>后直接执行程序。面向对象语言: 这意味着 Python 支持面向对象的风格或代码封装在对象的编程技术。_python3.10.11安装教程

推荐文章

热门文章

相关标签