【发布时间】:2019-09-08 17:50:00
【问题描述】:
我想替换基于组合框的小部件。我在组合框中有两种类型,以下是这些类型的函数:
void ThemeWidget::renderModeGraph() {
clearMode();
//create charts
QChartView *chartView;
chartView = new QChartView(createChart());
m_ui->top_left_graph->addWidget(chartView);
m_charts << chartView;
chartView = new QChartView(createChart());
m_ui->top_right_graph->addWidget(chartView);
m_charts << chartView;
chartView = new QChartView(createChart());
m_ui->bottom_left_graph->addWidget(chartView);
m_charts << chartView;
chartView = new QChartView(createChart());
m_ui->bottom_right_graph->addWidget(chartView);
m_charts << chartView;
}
void ThemeWidget::renderModeGraphStar() {
clearMode();
//create charts
QChartView *chartView;
chartView = new QChartView(createChart());
m_ui->top_left_graph->addWidget(chartView);
m_charts << chartView;
chartView = new QChartView(createChart());
m_ui->top_right_graph->addWidget(chartView);
m_charts << chartView;
chartView = new QChartView(createChart());
m_ui->bottom_left_graph->addWidget(chartView);
m_charts << chartView;
chartView = new QChartView(createChart());
m_ui->bottom_right_graph->addWidget(chartView);
m_charts << chartView;
}
我在模式改变之间调用函数clearMode,这里是:
void ThemeWidget::clearMode() {
if (!m_charts.isEmpty()) {
m_ui->top_left_graph->removeWidget(m_charts[0]);
m_ui->top_right_graph->removeWidget(m_charts[1]);
m_ui->bottom_left_graph->removeWidget(m_charts[2]);
m_ui->bottom_right_graph->removeWidget(m_charts[3]);
m_charts.clear();
}
}
一开始我打电话给renderModeGraph,一切都在渲染,布局很好,一切都很好。但是当我改变模式布局结构时流走了。我是 qt 和 c++ 的新手,所以不明白发生了什么以及如何解决这个问题,请帮助或提供建议以重组布局。
【问题讨论】:
-
为什么你有两个完全一样的函数?
-
真的不明白为什么你会一直放弃图表视图只是为了在以后重新创建它们。直接exchange当前显示的图表不是更高效吗?
-
哦,不知道有没有这样的功能,谢谢(ps是随机生成的,所以不一样)但是如果我想替换为不图表小部件怎么办?
-
那么你可能需要更新布局(它有一个同名的函数)。可能,您可能想选择一个更合适的布局管理器?我个人更喜欢只创建一次小部件,让它们保持并行,并隐藏不需要的小部件。 QStackedWidget 或 QStackedLayout 提供方便的方式。
-
谢谢,我会去找他们的。