Qt5笔记之QGraphicsScene QGraphicsView QGraphicsItem
来源:互联网 发布:淘宝网卖家中心不见了 编辑:程序博客网 时间:2024/06/05 17:35
1. 三者之间的关系:
(1) QGraphicsScene是QGraphicsView中的场景:
使用QGraphicsView::setScene()将scene加入到view中;
(2) QGraphicsScene又是QGraphicsItem的容器:
使用QgraphicsScene::addItem()将item加入到scene中,或addRect()之类的添加图形函数,利用这些函数的返回值赋值给item即可达到相同效果;
2. Item加入Scene的两种方法(以向场景中添加一个可拖动的长方形为例):
(1) 使用QgraphicsScene::addItem()将item加入到scene中:
//Test.cpp#include <QGraphicsView>#include <QGraphicsScene>#include <QGraphicsItem>#include <QPen>Test::Test(QWidget *parent): QWidget(parent){QGraphicsView *pView = new QGraphicsView();QGraphicsScene *pScene = new QGraphicsScene();pScene->setSceneRect(0, 0, pView->width(), pView->height());pView->setScene(pScene); QGraphicsRectItem *rectItem = new QGraphicsRectItem(200, 100, 200, 200);rectItem->setFlags(QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsFocusable);QPen pen = rectItem->pen();pen.setWidth(2);pen.setColor(QColor(111, 111, 111));rectItem->setPen(pen);rectItem->setBrush(QColor(111, 111, 111, 100));pScene->addItem(rectItem); QGridLayout *gridLayout = new QGridLayout(this);gridLayout->addWidget(pView, 0, Qt::AlignCenter);}
(2)使用QgraphicsScene::addRect()将item加入到scene中:
//Test.cpp#include <QGraphicsView>#include <QGraphicsScene>#include <QGraphicsItem>#include <QPen>Test::Test(QWidget *parent): QWidget(parent){QGraphicsView *pView = new QGraphicsView();QGraphicsScene *pScene = new QGraphicsScene();pScene->setSceneRect(0, 0, pView->width(), pView->height());pView->setScene(pScene); QGraphicsRectItem *rectItem = pScene->addRect(QRectF(200, 100, 200, 200));rectItem->setFlags(QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsFocusable);QPen pen = rectItem->pen();pen.setWidth(2);pen.setColor(QColor(111, 111, 111));rectItem->setPen(pen);rectItem->setBrush(QColor(111, 111, 111, 100)); QGridLayout *gridLayout = new QGridLayout(this);gridLayout->addWidget(pView, 0, Qt::AlignCenter);}
(3) 前两种方法得到的效果相同,如下:
注意:
1.QGraphicsItem::setFlags()方法要格外注意一下,之前new了一个QGraphicsTextItem,发现无法输入中文,就是因为调用setFlags()时没有把需要的flag都加进去,少加了一个支持其他国语言的flag,查文档可以看到关于setFlags的说明:
"Sets the item flags to flags. All flags in flags are enabled; all flags not inflags are disabled."
原来一旦调用就要把需要的flag都写进去,不然就disabled了。。
之前写的是:
setFlags(QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsFocusable);
改成如下即可(ItemAcceptsInputMethod是支持不同语言的flag):
setFlags(QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsFocusable | QGraphicsItem::ItemAcceptsInputMethod);
- Qt5笔记之QGraphicsScene QGraphicsView QGraphicsItem
- Qt绘图之QGraphicsScene QGraphicsView QGraphicsItem详解
- QGraphicsScene QGraphicsView QGraphicsItem-----
- QGraphicsScene QGraphicsView QGraphicsItem
- Qt绘图QGraphicsView、QGraphicsScene、QGraphicsItem
- 对QT 中QGraphicsView QGraphicsScene QGraphicsItem的初步理解
- QT QGraphicsView QGraphicsScene用法
- *QT QGraphicsScene、QGraphicsItem、QGraphicsProxyWidget、QWidget间的事件传递
- QGraphicsScene管理QGraphicsItem(单击/选择/移动/缩放/删除)
- QGraphicsScene管理QGraphicsItem(单击/选择/移动/缩放/删除)
- QT QGraphicsScene、QGraphicsItem、QGraphicsProxyWidget、QWidget间的事件传递
- 关于QGraphicsView里使用QGraphicsScene背景图片平铺的问题
- QGraphicsView与QGraphicsScene Qt窗体的消息传递
- QT小程序:利用QGraphicsScene和QGraphicsView进行显示操作
- Difference between drawing with QPainter and (QGraphicsView + QGraphicsScene)
- QGraphicsScene
- QGraphicsScene
- QGraphicsView框架容易忽视的坐标问题-“画布”QgraphicsScene到底放在了哪儿?
- justware + Sencha
- 简述区块链架构设计,通俗易懂
- 工作反思
- C++ 类成员函数
- QT int转16进制,并补0
- Qt5笔记之QGraphicsScene QGraphicsView QGraphicsItem
- 人群密度估计--Fully Convolutional Crowd Counting On Highly Congested Scenes
- Div+CSS布局入门教程
- 阅读源码是和大师面对面交流的机会之ArrayList检查是否有重复元素
- X509证书
- SpringMVC上传文件踩过的坑
- JFinal文件下载及设置路径
- python xml解析
- Subsequence