如何在QStackedWidget中显示QChartView并解决图表弹出独立窗口问题
问题根源
你代码中对ui->graphicsView的重新赋值操作是核心问题:UI文件生成时已经根据你在Qt Designer中的设置,实例化了提升后的QChartView对象,并且已经挂载到QStackedWidget对应页面的布局中。你执行ui->graphicsView = new QChartView(chart);时,覆盖了原有的控件指针,新创建的QChartView没有父容器,也没有加入到Form的布局树中,调用show()时自然会作为独立窗口弹出;删除show()后这个没有挂载的控件自然不可见,而原本的旧控件也没有关联你新创建的图表对象,所以也不会显示内容,同时还会产生内存泄漏。
修正方案
直接修改processStudioStats()函数末尾的错误代码即可:
替换前的错误代码
ui->graphicsView = new QChartView(chart); ui->graphicsView->show();
替换后的正确代码
// 直接给设计师提前创建好的QChartView设置图表即可,无需重新实例化 ui->graphicsView->setChart(chart); // 可选:开启抗锯齿优化图表显示效果 ui->graphicsView->setRenderHint(QPainter::Antialiasing);
补充说明
- 无需额外调用子控件的
show()方法,你调用pForm->show()时,Form内部布局挂载的所有子控件会自动显示。 - 如果要给QStackedWidget的第二个页面也添加图表,只需要在Qt Designer中给第二个页面也放置一个提升为QChartView的QGraphicsView,按照同样的逻辑调用
setChart()设置对应图表即可。
内容的提问来源于stack exchange,提问作者tgoerg
相关产品推荐
相关产品推荐

