我想替换基于组合框的小部件。我在组合框中有两种类型,这是这些类型的函数:
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++ 的新手,所以不明白发生了什么以及如何解决这个问题,请帮助或提供重组布局的建议。
最佳答案
问题是您有一个布局,每次您删除一个小部件时,布局都会发生变化。所以每次更改小部件时都需要修复它。要消除此问题,您可以使用包含图表小部件的 QWidget 容器创建基本 UI。每次更改小部件时,不是删除 QWidget 容器,而是删除图表并保留 QWidget。然后创建新的小部件并将其放入 QWidget 中。这样您的布局应该保持不变。
关于c++ - qt c++如何再次删除和添加小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57844407/