c++ - qt c++如何再次删除和添加小部件

标签 c++ qt qt5

我想替换基于组合框的小部件。我在组合框中有两种类型,这是这些类型的函数:

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++ 的新手,所以不明白发生了什么以及如何解决这个问题,请帮助或提供重组布局的建议。

这里还有布局结构和一些截图。 Ui layout structure strating of programm After choosing <code>graph *</code> in combobox

最佳答案

问题是您有一个布局,每次您删除一个小部件时,布局都会发生变化。所以每次更改小部件时都需要修复它。要消除此问题,您可以使用包含图表小部件的 QWidget 容器创建基本 UI。每次更改小部件时,不是删除 QWidget 容器,而是删除图表并保留 QWidget。然后创建新的小部件并将其放入 QWidget 中。这样您的布局应该保持不变。

关于c++ - qt c++如何再次删除和添加小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57844407/

相关文章:

c++ - memmove 和 c++11 std::move 有什么区别?

c++ - 是否可以通过删除基类中的复制构造函数/运算符来使派生类不可复制?

c++ - Qt:QXmlQuery和XPaths

c++ - Qt 5 c++ 当路径被 INCLUDEPATH 中的另一个路径屏蔽时如何包含文件?

c++ - 文件可读,但以二进制模式保存

c++ - 可变函数的使用

qt - 如何在 Qt 程序中嵌入二进制可执行文件(将在运行时执行)?

c++ - 如何在 Qt Linux 中捕获挂起事件

c++ - Qt - Visual Studio 2013 插件不会编译项目

c++ - 为支持 OpenSSL 的 Windows Phone 8.1 编译 Qt 5.5 的问题