当前位置: 首页 > news >正文

QT之二维绘图:场景,图元,视图

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

1、新建QT GUI项目,基类widget

2、在widget.h中

#include <QGraphicsScene>
#include <QGraphicsView>
#include <QDebug>





private:
     QGraphicsView *_view;
     QGraphicsScene *_scene;

2、在widget的构造函数中:

#include <QGraphicsLineItem>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
     _view = new QGraphicsView(this);
     _view->setScene(_scene = new QGraphicsScene);
     _scene->addItem(new QGraphicsLineItem(QLineF(0, 0, 100, 100)));
}

效果:

1c114a52ac659022ce892119c0e5c28d159.jpg

 

改进程序:让_view的效果随着对话框的变大而变大:如果_view小了会显示一部分scene,并且自动添加场景条。如果_view比_scene大,会全部显示。

方法1:添加布局,将_view放置为一个box布局

#include <QGraphicsLineItem>
#include <QVBoxLayout>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    QVBoxLayout *lay = new QVBoxLayout(this);

     _view = new QGraphicsView(this);
     lay->addWidget(_view);   //让_view自动布局
     _view->setScene(_scene = new QGraphicsScene);
     _scene->addItem(new QGraphicsLineItem(QLineF(0, 0, 100, 100)));
}

方法2:重写resizeEvent事件:让view的大小随着widget的大小变化而变化

在widget.h中添加:

void resizeEvent(QResizeEvent *);

在widget.cpp中是:

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
     _view = new QGraphicsView(this);
     _view->setScene(_scene = new QGraphicsScene);
     _scene->addItem(new QGraphicsLineItem(QLineF(0, 0, 100, 100)));
}

void Widget::resizeEvent(QResizeEvent *)
{
     //设置_view的大小为widget的大小
    _view->setGeometry(QRect(QPoint(0, 0), size()));
}

--

446ddf05efe6ee7dbda3aec363b4933ec32.jpg

17578e82e92061ebe2e795b22d5327aa1e4.jpg

其坐标原点始终在中间

 

、、-----

转载于:https://my.oschina.net/u/3919756/blog/1943994

相关文章:

  • DockOne微信分享( 八十八):PPTV聚力传媒的Docker与DevOps
  • VM中ubuntu虚拟机共享文件夹,mnt下面没有hgfs
  • 软件測试的类型、方法以及策略------一张图搞定
  • 高亮必填字段
  • golang语法学习(一):变量,常量以及数据类型
  • Unity实现刺客信条灯光的思路探究
  • 【webstrom】webstrom打开多个项目,webstrom常用快捷键
  • CentOS 英文版安装中文环境与中文输入法
  • SSH连接linux时,长时间不操作就断开的解决方案(增强版)
  • 代码整洁之有意义的命名
  • 在阿里云k8s服务中玩转最新版原生dashboard
  • Linux netstat常用命令
  • Python从菜鸟到高手(8):print函数、赋值与代码块
  • [译] 探索 Swift 4 中新的 String API
  • 右键添加复制路径选项
  • 30秒的PHP代码片段(1)数组 - Array
  • ECS应用管理最佳实践
  • Flex布局到底解决了什么问题
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • leetcode-27. Remove Element
  • Phpstorm怎样批量删除空行?
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • SpiderData 2019年2月16日 DApp数据排行榜
  • uva 10370 Above Average
  • vuex 笔记整理
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • webgl (原生)基础入门指南【一】
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 回顾 Swift 多平台移植进度 #2
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 前端工程化(Gulp、Webpack)-webpack
  • 实现简单的正则表达式引擎
  • 实战|智能家居行业移动应用性能分析
  • Java数据解析之JSON
  • ​批处理文件中的errorlevel用法
  • #NOIP 2014#Day.2 T3 解方程
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (pojstep1.3.1)1017(构造法模拟)
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (推荐)叮当——中文语音对话机器人
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .Net CoreRabbitMQ消息存储可靠机制
  • .net core控制台应用程序初识
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • .net下简单快捷的数值高低位切换
  • @RequestParam详解
  • [@Controller]4 详解@ModelAttribute
  • [20180224]expdp query 写法问题.txt
  • [ARC066F]Contest with Drinks Hard
  • [C#]winform部署PaddleOCRV3推理模型
  • [HTML]Web前端开发技术6(HTML5、CSS3、JavaScript )DIV与SPAN,盒模型,Overflow——喵喵画网页