重写QGraphicsView类,在重写的paintEvent中调用Qpainter的drawRect方法绘制矩形,但是发现绘制无效

菜鸟阿丹 2018-08-21 03:35:50
重写QGraphicsView类,在类中重写paintEvent调用Qpainter的drawRect方法绘制矩形,单步调试,确定执行了drawRect, 但是发现绘制无效,哪位可以解答这是为什么?
...全文
1206 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
菜鸟阿丹 2018-09-20
  • 打赏
  • 举报
回复
问题还未解决,求大神指教
菜鸟阿丹 2018-08-27
  • 打赏
  • 举报
回复
引用 3 楼 sghcpt 的回复:
楼主,你确定有调用的paintEvent函数??下面的测试代码在我这边是可以的。
void Widget::paintEvent(QPaintEvent* event)
{
QPainter painter(this);

QRectF rectangle(10.0, 20.0, 80.0, 60.0);
painter.drawRect(rectangle);
}


你是继承的QGraphicsView类吗?
菜鸟阿丹 2018-08-27
  • 打赏
  • 举报
回复
引用 5 楼 sghcpt 的回复:
楼主,不是继承QGraphicsView类的,只是继承QWidget类的。。楼主如果那边还是不行,可以试试下面更新顺序:
1.ui->graphicView->viewport()->update();
2.view->viewport()->update();

或者来自网友的其它办法:
1别使用它的paintEvent(),要绘制图形需要重写GGraphicsItem中的paint()纯虚函数。或者你也可以覆盖写QGraphicsView的drawBackground()或drawForeground()函数。
2.为什么要在view中重写paintEvent..一般是在scene上加item,然后重写item的paint 。


你好,感谢你的知道,因为项目需求,在一个窗口上定义了多个自定义控件,需要实现
1、鼠标拖动框选控件,画出矩形框(这就是调用drawRect的原因)。
2、手动按着ctrl,同时鼠标滚轮转动,实现窗口上所有控件的缩放(视图缩放)。
基于上述需求,本来一开始继承可QWidget,这样框选都一切正常,
后来因为需要实现视图缩放,所以将基类改成了QGraphicsView,就会出现问题中所描述的问题,你看下有什么建议,重点是这种情况下窗口上的控件视图缩放怎么实现?
谢谢了
sghcpt 2018-08-27
  • 打赏
  • 举报
回复 1
楼主,不是继承QGraphicsView类的,只是继承QWidget类的。。楼主如果那边还是不行,可以试试下面更新顺序:
1.ui->graphicView->viewport()->update();
2.view->viewport()->update();

或者来自网友的其它办法:
1别使用它的paintEvent(),要绘制图形需要重写GGraphicsItem中的paint()纯虚函数。或者你也可以覆盖写QGraphicsView的drawBackground()或drawForeground()函数。
2.为什么要在view中重写paintEvent..一般是在scene上加item,然后重写item的paint 。
sghcpt 2018-08-22
  • 打赏
  • 举报
回复
楼主,你确定有调用的paintEvent函数??下面的测试代码在我这边是可以的。
void Widget::paintEvent(QPaintEvent* event)
{
QPainter painter(this);

QRectF rectangle(10.0, 20.0, 80.0, 60.0);
painter.drawRect(rectangle);
}
菜鸟阿丹 2018-08-22
  • 打赏
  • 举报
回复
引用 1 楼 ai977313677 的回复:
有update或者repaint吗?


有update,update是触发调用paintEvent的吧,paintEvent里的drawRect已经有执行,问题是执行无效

  • 打赏
  • 举报
回复
有update或者repaint吗?

64,654

社区成员

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

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