Qt 使用QGraphicsView如何显示自己定义QGraphicsItem

RubOne 2013-04-13 04:13:26
小弟正在学习Qt画图(Qt版本4.8.1),最初使用QPainter直接在QMainWindows上绘图,继而是QGraphicsView视图框架,我在网上看了很多关于QGraphicsView、QGraphicsScene和QGraphicsItem框架文章,但大都是众说一词、换汤不换药,总体上可以理解三者之间的关系,但是当实际编写代码时问题就来了:
@一@.首先,我使用图形编辑器往主窗口上拖了一个QGraphicsView(取名 my_view)控件,在主程序窗口的某一个事件处理函数中声明了一个: QGraphicsScene my_scene;
然后添加代码:
my_sence.addText("Test");
ui->my_view->setScene(&my_scene);
接着开始调试,于是主窗体的QGraphicsView正中央显示出字符串“Test”。再接着,我声明了一个:
QPixmap my_image;
接着,往QPixmap中加载图片:
my_image.load("d:\\test.png");
注释掉之前的 my_sence.addText("Test") 后,在其下一行添加了代码行:
my_sence.addPixmap(my_image);
其他的不作更改,按F5,主窗体的QGraphicsView正中央显示出图片“test.png”;
这些都没有什么问题。接下来,我想利用QGraphicsItem绘图。
@二@.接着,我自定义了一个MyItem的类,继承自QGraphicsItem,重新能够实现了两个虚函数:
QRectF boundingRect()const;
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
boundingRect的返回值为QRectF(0,0,400,400);
我在paint函数中简单的使用 painter->drawLine(0,0,200,200)画一条直线。
仿照 @一@ 的描述,我使用了如下代码:
MyItem item;
my_sence.addItem(&item);
my_view.setScene(&my_scene);
调试之后发现窗口的QGraphicsView里面什么都没有,这是为什么呢?是不是我还有没有实现的虚函数?或者是我调用的方法不对还是其他什么原因呢?
...全文
1289 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
和你倾听_琴 2014-10-16
  • 打赏
  • 举报
回复
坐标系不一样,view坐标系、scene坐标系和item坐标系;
sunnyxiaoqiao 2014-05-07
  • 打赏
  • 举报
回复
楼主最后是怎么解决的呀,我也遇到了这个问题,一直没办法解决啊。。。。。 能分享下经验不?多谢多谢
feel_点点滴滴 2013-08-10
  • 打赏
  • 举报
回复
你把QGraphicsView 和QGraphicsScene定义成指针就好了吧!
  • 打赏
  • 举报
回复
引用 1 楼 RubOne 的回复:
貌似无人问津,还好我自己解决了。唉。
是不是坐标范围超出了?最后怎么解决的
rrrrr111 2013-04-24
  • 打赏
  • 举报
回复
请问一下,用QGraphics能不能做到添加可移动控制的图片呢(这个图片自己定义的)如果是多边形的话,这个还知道,但是多边形达不到效果啊
RubOne 2013-04-15
  • 打赏
  • 举报
回复
貌似无人问津,还好我自己解决了。唉。

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧