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

Posted

技术标签:

【中文标题】如何调整可扩展对话框的大小?【英文标题】:How to resize an expandable dialog? 【发布时间】:2016-04-03 15:15:53 【问题描述】:

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

但由于某种原因,对话框大小仅在底部小部件展开时才会增加。并且永远不要缩回到 (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);

感谢您的帮助:)

【问题讨论】:

是否可以手动调整对话框的大小?如果不是,您可以将主布局的大小约束设置为 QLayout::SetFixedSize。当您隐藏或显示小部件时,布局应该会自动调整大小。 【参考方案1】:

您应该改用setFixedSize(w, h)。这会将最小和最大尺寸都设置为 (w, h)。 “这将覆盖 QLayout 设置的默认大小约束。”

【讨论】:

以上是关于如何调整可扩展对话框的大小?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Chrome扩展程序中测试可选权限?

如何制作可扩展的 UITableView 标头?

在任何浏览器维度的中间居中垂直和水平可扩展的 div [重复]

如何强制 uitableview 调整单元格的大小(在停用高度约束后)?

Firebase 图像大小调整扩展。引用调整大小的图像

怎样扩展VMware虚拟机的硬盘容量