Qt 平滑更新QGraphicscene
您好,我已经成功地使用下面的代码向QGraphicscene添加了许多QGraphicsSitemQt 平滑更新QGraphicscene,qt,python-2.7,qt4,pyqt4,qgraphicsscene,Qt,Python 2.7,Qt4,Pyqt4,Qgraphicsscene,您好,我已经成功地使用下面的代码向QGraphicscene添加了许多QGraphicsSitem def generate_graph_and_update_scene(self): try: local_params=locals() #for error log get local paramters this_function_name=sys._getframe().f_code.co_name #for error log get function name
def generate_graph_and_update_scene(self):
try:
local_params=locals() #for error log get local paramters
this_function_name=sys._getframe().f_code.co_name #for error log get function name
self.vertex_dict.clear()
self.clear() #clear graphicsscene
self.graph_pos.clear() #clear graph position holder object
#function that generates the node data
root_nodes=my_database_query.get_nodes_information()
for node in root_nodes:
# add nodes to nx.graph object
self.nx_graph.add_node(node['column1'])
# create networkx graph
self.graph_pos = nx.spring_layout(self.nx_graph, iterations=25,scale=10)
for node in self.nx_graph.nodes(): # Add nodes to qgraphicsscene
v=default_nodeobject.my_ellipse(node,self.graph_pos)
self.addItem(v) # Add ellipse to qgraphics scene
for edge in self.nx_graph.edges():
self.addItem(defaultedgeview.edgeview(edge[0], edge[1],self.graph_pos))#add edges to qgraphicscene
except:
#Exception handler
message=str(sys.exc_info())
message=message + str(local_params)+" "+ str(this_function_name)
print message
这允许我将600个节点添加到qgraphics场景中,但是当我清除场景并添加1500个节点时,添加的项目会阻塞UI,整个应用程序会冻结几秒钟。
此外,每当我在GraphicsSitems中执行循环之类的操作时,比如查找具有特定属性的节点时,主线程在我循环时再次冻结
在对场景中的grpahicsscene/项执行操作时,是否有人可以建议一种保持UI响应的好方法。
理想情况下,我希望对场景进行平滑、无阻塞的更新,即使我显示了几千个项目。这里的问题是将每个节点作为图形项目进行管理。添加和删除场景以及渲染每个项目都需要时间。有这么多项目,我建议用不同的设计 将节点图视为单个自定义图形项,它存储一组节点并将它们作为单个单元进行管理,而不是600多个单独的项 通过这种方式设计,您只需向场景中添加一项节点图即可快速添加和删除节点,并且还可以看到渲染场景时的性能改进,因为所有节点都在一次绘制调用中绘制 当然,如果需要通过单击并拖动节点来移动节点,则必须添加额外的代码来检测项目中正在选择的节点并自行移动
但是,这是处理场景中如此大量项目的最佳方式。多线程。。。在另一个线程中创建节点,然后在主线程中将它们添加到UI中。。这是必需的,因为只有主线程可以更新场景。。从不同线程执行此操作将导致错误感谢Merlin069,我需要通过单击移动节点,甚至为默认的_nodeobject创建上下文菜单。在编写代码来检测/管理每个节点时,我甚至不知道从哪里开始。唉,游戏引擎/和粒子模拟人生是如何做到的?我能看到任何好的代码来说明如何解决这些问题吗?游戏引擎和粒子系统的工作方式与我描述的相同。也许这个问题的答案可以帮助您: