【问题标题】:How to dynamically add widget inside a QStackedWidget如何在 QStackedWidget 中动态添加小部件
【发布时间】:2020-08-28 12:24:48
【问题描述】:

为了复制我遇到的问题,我准备了一个可验证的小示例。

我在 QGroupBox 中有 2 个 QStackedWidgets,还有几个组件,如下所示:

我创建了另一个名为QBoxForm 的小部件,它只带有QComboBox。 勾选QCheckbox 后,最后一个小部件应出现在左侧的QStackedWidget 上。

QStackedWidget 收到一些东西,因为它变大了,但它没有显示 QComboBox。如何确保组件在 QStackedWidget 中完全可见?

ma​​inwindow.cpp

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    mCombo = new CBoxForm;

}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_checkBox_toggled(bool checked)
{
    if(ui->checkBox->isChecked())
    {
        if(checked)
        {
            ui->stackedWidget->insertWidget(0, mCombo);
            ui->stackedWidget->show();
        }
    }
    if(!ui->checkBox->isChecked())
    {
        ui->stackedWidget->removeWidget(mCombo);
    }
}

ma​​inwindow.h

#include <QMainWindow>
#include "cboxform.h"

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void on_checkBox_toggled(bool checked);

private:
    Ui::MainWindow *ui;
    CBoxForm *mCombo;
};

最后是由另一个小部件处理的附加组合框:

cboxform.h

#include <QWidget>

namespace Ui {
class CBoxForm;
}

class CBoxForm : public QWidget
{
    Q_OBJECT

public:
    explicit CBoxForm(QWidget *parent = nullptr);
    ~CBoxForm();

private:
    Ui::CBoxForm *ui;
};

cboxform.cpp

CBoxForm::CBoxForm(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::CBoxForm)
{
    ui->setupUi(this);
}

CBoxForm::~CBoxForm()
{
    delete ui;
}

到目前为止我做了什么:

1) 我遵循official documentation 并按照建议应用了方法insertWidget()。事实上here 正是我所做的。这部分有效,并且可以通过QStackedWidget 在我选中该框时变大这一事实来确认。

因此,我以类似的方式删除了小部件,应用了官方文档中提供的removeWidget() 方法。

一切似乎都遵循正确的功能,但唯一缺少的部分是我不明白为什么QComboBox 没有出现在QStackedWidget 上,因为我完全遵循了官方文档。

对我可能遗漏或忘记包含在上述代码中的内容有任何想法吗? 感谢您指出解决此问题的正确方向。

【问题讨论】:

  • 您是否在 QStackedWidget 中放置了任何布局?我会尝试为 CBoxForm 内的 QComboBox 设置最小宽度和高度。还要确保查看 QStackedWidget 项目的正确页面。在 ui->stackedWidget->insertWidget(0, mCombo) 之后尝试 ui->stackedWidget->setCurrentIndex(0)
  • 谢谢! :) 错误正是您所指出的。我应该在该声明之后插入ui-&gt;stackedWidget-&gt;setCurrentIndex(0)。感谢您发现错误。如果你写答案我可以接受:)

标签: c++ qt c++11 qt5 qstackedwidget


【解决方案1】:

您应该在 ui->stackedWidget->insertWidget(0, mCombo) 之后添加 ui->stackedWidget->setCurrentIndex(0) 以使其可见。 p>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多