在涉及到大数据量的数据处理时,很容易页面卡死,那么怎么搞呢,费了好久时间,终于找到了个方法,在此分享一下:那就是在耗时的程序部分(如循环内)添加实时刷新页面的代码
QApplication.processEvents()
for v_feat in v_features:
v_geom = v_feat.geometry()
v_ori_pts = self.getPoints(v_geom)
for pt in v_ori_pts:
type=pt.geometryType()
x = pt.x()
y = pt.y()
z = pt.z()
if str(z) !='nan':
z_value = self.get_Z_Value(x, y, r_layer)
str_z_value = str(z_value)
if str_z_value == 'nan':
pt.setZ(10000)
else:
pt.setZ(z_value)
else:
QMessageBox.warning(self.dlg, "提示", "点几何类型无Z维度,请添加!")
v_layer.commitChanges()
self.dlg.close()
return
wkt = "MultiLineStringZ(("
for i in range(0, len(v_ori_pts)):
if (i < len(v_ori_pts) - 1):
wkt = wkt + str(v_ori_pts[i].x()) + " " + str(v_ori_pts[i].y()) + " " + str(
v_ori_pts[i].z()) + ","
else:
wkt = wkt + str(v_ori_pts[i].x()) + " " + str(v_ori_pts[i].y()) + " " + str(
v_ori_pts[i].z()) + "))"
new_v_geom = QgsGeometry.fromWkt(wkt)
v_layer.changeGeometry(v_feat.id(),new_v_geom,False)
rate=n/allFeatureNum
self.dlg.label.setText("进度" + str(rate*100) + "% ")
n+=1
QApplication.processEvents()
大致逻辑如下:即可保证页面每隔一段时间刷新一次,显示内容刷新,不会存在长时间无响应的情况。这样,就不会导致页面卡着不动了。