首页| 论坛| 消息

标题:求助关于QGraphicsScene中SVGItem的刷新问题
作者:longkimari
日期:2018-04-18 18:57
内容:

各位大师:
我在做一个仪表类项目,用得是QGrahpicsScene。
基本结构是这样的:
m_scene ----->textItem(位置不变、内容用Setplainttext来改变)、svgitem (位置不变,内容不变的框架)
|——> svgitem类(位置或内容需要变更的)
通过timer控制m_scene.update ;

在svgitem类中,用QSvgRenderer载入svg素材,用QSvgRenderer.setviewbox来确定显示素材的区域,render来渲染;
整个重绘数据是一个全局数据结构;由一个UDP类提供更新;
目前程序运行都是正常的,但是遇到一个问题:
在timer控制的scene.update执行后,svgitem类显示的内容没有根据数据更新;
如果在强制在 scene.update前执行QGraphicsSVGItem.update进行更新,
那么虽然运行正常了,但是刷新率下降到无法容忍的程度;
&n ..


#1 [maxlogo 04-19 09:22]
刷新不要全部刷新,而仅是当item的boundingRect改变时才需要刷新, prepareGeometryChange 了解一下
#2 [大漠之鹰 04-19 11:29]
什么平台?
硬件性能怎么样?
Qt4还是Qt5,有没有绘制加速?
界面刷新最好由数据驱动吧,哪些元素变化了更新哪些元素,定时器刷新你是全部刷新的吧?数据量偏大啊。应该是实时监测UDP数据,变化后发送信号给相关Item,Item做更新。
#3 回 maxlogo 的帖子 [longkimari 04-19 11:36]
maxlogo:刷新不要全部刷新,而仅是当item的boundingRect改变时才需要刷新, prepareGeometryChange 了解一下 (2018-04-19 09:22) 
item的boundingRect设定是不会改变的,但是其中的素材内容会变;这样是不是不会触发刷新?
#4 回 大漠之鹰 的帖子 [longkimari 04-19 11:38]
大漠之鹰:什么平台?
硬件性能怎么样?
Qt4还是Qt5,有没有绘制加速?
界面刷新最好由数据驱动吧,哪些元素变化了更新哪些元素,定时器刷新你是全部刷新的吧?数据量偏大啊。应该是实时监测UDP数据,变化后发送信号给相关Item,Item做更新。 (2018-04-19 11:29) 
平台是WIN7 硬件性能绝对没问题
QT5,绘制加速没有特别去设置,怎么设置?
用的QGLWidget,初始化代码如下:
pWidget = new QGLWidget(QGLFormat(QGL::SampleBuffers));
pWidget->resize(1024,768);
resize(1024,768);
move(440,0);
m_scene= new QGraphicsScene;
m_view= new QGraphicsView(this);
m_view->setSceneRect(0,0,1024,768);
m_view->setCacheMode(QGraphicsView::CacheBackground);
m_view->setOptimizationFlags(QGraphicsView::DontSavePainterState);
m_view->setViewportUpdateMode(QGraphicsView::SmartViewportUpdate);
m_view->setViewport(pWidget);
m_view->setStyleSheet("border:none; background:transparent;");
m_view->setScene(m_scene);
#5 [maxlogo 04-19 13:22]
刷新应由item的update刷新,尽量避免整个scene的update

<< 1 2 3 >> (1/3)

回复 发表
主题 版块