一杯清酒邀明月
天下本无事,庸人扰之而烦耳。
posts - 3121,comments - 209,views - 578万

症状

在QGraphicsView的事件中,不论使用 update,repaint,抑或updateScence,resetCacheContent, 均不可以刷新界面

程序里参考上一篇博文的方法,在QGraphicsView中使用了Opengl,即,把QGraphicsView的视口委托给QGLWidget来渲染

参考资料

一个比一个坑爹,都不管用

解决方案

调用 viewport 的update函数!!!

参考代码

首先,把QGLWidget绑定到QGraphicsView上,从而可以使用opengl进行渲染

1 void MYGraphicsView::setRenderGLWidget(QGLWidget *widget)
2 {
3     this->setViewport(widget);
4     this->setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
5 }

在 drawBackground 函数中使用opengl画图

复制代码
 1 void MYGraphicsView::drawBackground(QPainter *,const QRectF &)
 2 {
 3     glClearColor(1,1,1,1);
 4     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 5  
 6     glMatrixMode(GL_PROJECTION);
 7     glPushMatrix();
 8     glLoadIdentity();
 9     gluOrtho2D(0,1,0,1);
10  
11     glMatrixMode(GL_MODELVIEW);
12     glPushMatrix();
13     glLoadIdentity();
14  
15     glColor3f(0,0,0);
16     glLineWidth(2);
17  
18     float margin=0.05;
19     float l=margin,r=1-margin,b=margin,t=1-margin;
20     int splitNum=9;
21     float dx=(1-margin*2)/(splitNum+1);
22  
23     glBegin(GL_LINE_LOOP);
24         glVertex2f(l,b);
25         glVertex2f(l,t);
26         glVertex2f(r,t);
27         glVertex2f(r,b);
28     glEnd();
29  
30     glBegin(GL_LINES);
31     for(int i=1;i<=splitNum;++i)
32     {
33         glVertex2f(l,b+dx*i);
34         glVertex2f(r,b+dx*i);
35         glVertex2f(l+dx*i,b);
36         glVertex2f(l+dx*i,t);
37     }
38     glEnd();
39     glPopMatrix();
40  
41     glMatrixMode(GL_PROJECTION);
42     glPopMatrix();
43 }
复制代码

最后,事件更新

复制代码
 1 void MYGraphicsView::wheelEvent( QWheelEvent * event )
 2 {
 3     double factor=event->delta()>0?1.1:1/1.1;
 4     mpiMsg.scale.x*=factor;
 5     mpiMsg.scale.y=mpiMsg.scale.x;
 6    this->viewport()->update();
 7 
 8     mpiMsg.broadCast(M*N);
 9     MPI_Barrier(MPI_COMM_WORLD);
10 }
复制代码

 

posted on   一杯清酒邀明月  阅读(1137)  评论(1编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示