如何清除wxmathplot中mpWindow的图表以切换数据集?
wxmathplot更新图表清除绘图区域的正确方法
别用
wxPanel->DestroyChildren();,这会直接销毁mpWindow控件,后续无法复用,完全没必要。mpWindow->DelAllLayers(true);是正确的清除方式,但要注意两个关键点:- 这个方法会删除所有图层,包括坐标轴,所以清除后必须重新添加
mpScaleX/mpScaleY这类坐标轴图层 - 清除并添加新图层后,必须调用刷新函数让界面更新
- 这个方法会删除所有图层,包括坐标轴,所以清除后必须重新添加
完整的切换数据集代码示例:
void YourFrame::OnDatasetChoice(wxCommandEvent& evt) { // 清除所有现有图层 m_mpWin->DelAllLayers(true); // 重新添加坐标轴 mpScaleX* xScale = new mpScaleX("X Axis", mpALIGN_BOTTOM); mpScaleY* yScale = new mpScaleY("Y Axis", mpALIGN_LEFT); m_mpWin->AddLayer(xScale); m_mpWin->AddLayer(yScale); // 根据选中项创建新曲线 int selected = evt.GetSelection(); mpFXYVector* curve = new mpFXYVector(GetDatasetName(selected)); // 填充对应数据集的数据到curve PopulateCurveData(curve, selected); m_mpWin->AddLayer(curve); // 强制刷新绘图区域 m_mpWin->Refresh(); m_mpWin->Update(); }如果调用
DelAllLayers后还是有残留,检查:- 是否漏了重新添加坐标轴,导致新曲线没有参考系无法渲染
- 是否没有调用
Refresh()/Update(),界面没触发重绘 - 确认mpWindow实例是同一个,没有重复创建新的mpWindow控件
内容的提问来源于stack exchange,提问作者Hzine
相关产品推荐
相关产品推荐

