如何调整可展开对话框的大小

How to resize an expandable dialog?

本文关键字:对话框 可展开 何调整 调整      更新时间:2023-10-16

我正在尝试创建一个可扩展的Qt对话框应用程序。主布局为QVBoxLayout。顶部有两个视图和一个QPushButton按钮。单击按钮将展开最初隐藏的底部小部件。在底部小部件中,还有另一个按钮,可以折叠(隐藏)底部小部件。当底部小部件折叠/展开时,我预计对话框大小也会发生变化。

但由于某些原因,只有当底部小部件展开时,对话框的大小才会增加。永远不要缩回到(200,100)。我错过了什么吗?

环境:Qt Creator 3.6.1; Based on Qt5.6.0 (MSVC2013 32bit); build on Mar 14 2016; revision d502727b2c

我使用的代码:

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    QTreeView *tree = new QTreeView;
    QTableView *table = new QTableView;
    QPushButton *button_show = new QPushButton;
    button_show->setText(tr("Show hidden panel"));
    QHBoxLayout *layout_top = new QHBoxLayout;
    layout_top->addWidget(tree);
    layout_top->addWidget(table);
    layout_top->addWidget(button_show);

    QHBoxLayout *layout_bottom = new QHBoxLayout;
    QTextEdit *editor = new QTextEdit;
    QPushButton *button_hide = new QPushButton;
    button_hide->setText(tr("Hide the bottom panel"));
    g_pEditor = editor;
    layout_bottom->addWidget(editor);
    layout_bottom->addWidget(button_hide);
    QWidget *panel = new QWidget;
    panel->setLayout(layout_bottom);
    QVBoxLayout *layout_main = new QVBoxLayout;
    layout_main->addLayout(layout_top);
    layout_main->addWidget(panel);
    setLayout(layout_main);
  panel->hide();
  connect(button_show, &QPushButton::clicked
      , panel
      , [=]()
  {
    panel->setVisible(true);
    button_show->setEnabled(false);
    resize(200, 200);// not really working, the dialog size is able to increase without calling resize()
  });
  connect(button_hide, &QPushButton::clicked, panel, [=]()
  {
    panel->hide();
    button_show->setEnabled(true);
    resize(200,100);// does not shrink the dialog size*
  });
  resize(200,100);
}

感谢您的帮助:)

您应该尝试setFixedSize(w, h)。这将最小和最大大小都设置为(w,h)。"这将覆盖QLayout设置的默认大小限制。"