为了复制这个问题,我准备了一个可验证的小例子。
我QStackedWidgets
在 aQGroupBox
中有 2 个,还有几个组件,如下所示:
我创建了另一个名为的小部件,它只QBoxForm
携带一个QComboBox
。勾选后,最后一个小部件应出现在QStackedWidget
左侧。QCheckbox
收到一些东西,QStackedWidget
因为它变大了,但它没有显示QComboBox
。如何确保组件在内部完全可见QStackedWidget
?
主窗口.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);
}
}
主窗口.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)我按照官方文档并按照建议应用了该方法insertWidget()
。事实上,这正是我所做的。这部分有效,并且可以通过QStackedWidget
我选中该框时变大的事实来确认。
因此,我也以类似的方式删除了小部件,应用了官方文档中提供的removeWidget()方法。
一切似乎都遵循正确的功能,但唯一缺少的部分是我不明白为什么QComboBox
没有出现在QStackedWidget
我严格遵循官方文档的情况下。
关于我可能遗漏或忘记包含在上述代码中的任何想法?感谢您指出解决此问题的正确方向。