QGraphics
QGraphicsView和QGraphicsScene
QGraphicsScene提供一个场景,可以添加各种item,QGraphicsView用于将元素显示,并支持旋转和缩放;可以将QGraphicsScene比作世界,QGraphicsView比作摄像机
基本用法:
将item加入scene后,通过setScene放入view查看
#include <QApplication>
#include <QtWidgets>
#include <QGraphicsScene>
#include <QGraphicsView> int main(int argc,char **argv)
{
QApplication app(argc,argv); QGraphicsScene *scene = new QGraphicsScene;
QGraphicsView *view = new QGraphicsView; scene->addLine(,,,);
view->setScene(scene);
view->resize(,);
view->show(); return app.exec();
}
其他QGraphics封装的类
#include <QGraphicsLineItem>
#include <QGraphicsPixmapItem>
#include <QGraphicsTextItem>
#include <QGraphicsItemAnimation> //动画
#include <QTimeLine>
例子:
MyWidget::MyWidget(QWidget *parent) : QWidget(parent)
{
QGraphicsLineItem* lineItem;
QGraphicsTextItem* textItem;
QGraphicsPixmapItem* pixmapItem; _view = new QGraphicsView(this); _view->setScene(_scene = new QGraphicsScene); _scene->addItem(lineItem = new QGraphicsLineItem(QLineF(QPointF(, ), QPointF(, ))));
_scene->addItem(textItem = new QGraphicsTextItem("hello world"));
_scene->addItem(pixmapItem = new QGraphicsPixmapItem(QPixmap("../1.jpg")));
textItem->setFont(QFont("aaa", , , true));
pixmapItem->setPos(,); //设置动画
QGraphicsItemAnimation* animation = new QGraphicsItemAnimation;
animation->setItem(pixmapItem);
QTimeLine* timeline = new QTimeLine();
timeline->setLoopCount(); //次数 animation->setTimeLine(timeline);
animation->setTranslationAt(,,);
timeline->start();
}
//实现截屏
void MyWidget::mousePressEvent(QMouseEvent *ev)
{
if( ev->button() == Qt::RightButton)
{
QPixmap pixmap(size()); //初始化画布大小为窗口大小
QPainter painter(&pixmap);
painter.fillRect(QRect(,,size().width(),size().height()),Qt::white); //将画布置为白色,默认Pixmap是黑色
_view->render(&painter);
pixmap.save("../b.png");
}
}
注意render的用法,一般窗口类都有,相当于渲染,从一个对象拷贝到另一个对象
QPainter用来执行绘制的操作;QPaintDevice是一个二维空间的抽象,这个二维空间允许QPainter在其上面进行绘制,也就是QPainter工作的空间;QPaintEngine提供了画笔(QPainter)在不同的设备上进行绘制的统一的接口。

QPaintDevice可以理解成要在哪里去绘制,QPaintDevice有很多子类,比如QImage,以及QWidget,QPixmap,QBitmap
QGraphics的更多相关文章
- 杂烩:QWidget、QGraphics、QtQuick
一说起Qt 大都会想起Qt的GUI编程,具体到某个类的话,最多的就是QWidget类及其子类了. 其实Qt中还有基于项的图形视图,具体来说QGraphicsView,QGraphicsScene,QG ...
- Qt编程之在QGraphics scene中使用图片
http://stackoverflow.com/questions/5960074/qimage-in-a-qgraphics-scene http://stackoverflow.com/ques ...
- Qt中QGraphics类坐标映射关系详解
1.Item(图元)坐标:属于局部坐标,通常以图元中心为原点(中心对称),非中心对称类,比如dialog类,一般以左上角为原点,正方向x朝右,y朝下. 2.setPos的坐标是父类坐标系的坐标,一般对 ...
- Qt绘图之QGraphicsScene QGraphicsView QGraphicsItem详解
Graphics View提供了一个界面,它既可以管理大数量的定制2D graphical items,又可与它们交互,有一个view widget可以把这些项绘制出来,并支持旋转与缩放.这个柜架也包 ...
- Qt中绘图坐标QPainter,Viewport与Window的关系
在Qt中常常要自己重载一些paintEvent函数,这个时候往往忽略了两个很关键的API,那就是setViewport和setWindow. Viewport,顾名思义,反应的是物理坐标,就是你实际想 ...
- 玩玩Qt(一)
最近在看一些关于游戏引擎的东西,本来是有几个游戏的小点子,其实实现起来还挺麻烦的,想找个游戏引擎看看能不能码起来.辗转之后发现了很多2D引擎,其中国产的要数cocos2dx用的好像是比较广泛,但是好多 ...
- pyqt5 动画在QThread线程中无法运行问题
自己做了一个tcp工具,在学习动画的时候踩了坑,需求是根据上线变绿色,离线变灰色,如果连接断开了,则变为灰色 问题现象: 可以看到点击"连接","离线"的时候动 ...
- Qt框架及模块认识
小白自工作就接触Qt,一直都在使用Qt5.3.1版本,所以没有经历过大牛们把项目从Qt4程序到Qt5的烦恼,没准以后会碰到.对Qt所有的丰富的API表示惊叹,对于Qt的框架及模块认识也是极为模糊的,文 ...
- pyqt-QGrapicsView 坐标系详解
PTQT——GraphicsView框架 转载 原网址 http://blog.51cto.com/9291927/1879128 一.GraphicsView框架简介 QT4.2开始引入了Graph ...
随机推荐
- 基于.NET的WebService的实现和WCF的实现
1.新建一个MVC web项目. 2.点击项目,[右键]→[添加]→[新建项] 3.点击[Web]→[Web服务] 4.恭喜,Web Service已经新建成功,里面的方法就可以参考着根据自己的需要进 ...
- IOS学习:在工程中添加百度地图SDK
1.将下载下来的sdk中的inc文件夹.mapapi.bundle.libbaidumapapi.a添加到工程中,其中libbaiduapi.a有两个,一个对应模拟器一个对应真机,导入方法如下: 第一 ...
- 对ASP.NET Entity FrameWork进行单元测试
添加一个测试用的类库:将Web.config中的connectionstrings节点下的东东复制一份到刚添加的类库的app.config下 使用NUint+TestDriven.net进行测试: 如 ...
- SQLAlchemy连接数据库并在django admin显示
SQLAlchemy 0.7 postgersql 9.0 SQLAlchemy连接数据库有两种方法,一种是classic,一种是modern 1,modern方法 from sqlalch ...
- 安装使用rspec
一,安装ruby. 二,运行命令,安装rspec的gem包: gem install rspec 会看到如下的结果: Fetching: rspec-core-2.14.7.gem (100%) Fe ...
- linux C socket
socket套接字和管道同样可以提供进程内通信.但套接字更胜一筹,不同的进程可以跨越不同的主机(说白了,支持网络通信).使用套接字的知名程序:telnet.rlogin.ftp等. 你需要知道的一些基 ...
- Iframe 自适应高度的方法!
第一种方法:代码简单,兼容性还可以,大家可以先测试下. function SetWinHeight(obj) { var win=obj; if (document.getElementById) { ...
- .Net码农学Android---快速了解数据存储
数据存储 Andoid中的数据存储和我们平时见到的不一样,或者说移动设备的存储和平时不一样.Andoid中的存储方式有五种, 单把存储拎出来,是因为我们后续的开发会经常用到,重要性不言而喻,多样的存储 ...
- 【转载】MongoDB参数
我们可以通过mongod --help查看mongod的所有参数说明,以下是各参数的中文解释. 基本配置–quiet# 安静输出 –port arg# 指定服务端口号,默认端口27017 –bind_ ...
- Linux 删除文件后空间不释放磁盘空间
在Linux操作系统下,有个没用的文件占用了400G,于是删除掉. [root@yoon log]# rm -rf messages [root@yoon log]# df -hFilesystem ...