在Qt中显示隐藏小部件时调整窗口大小

在Qt中显示隐藏小部件时调整窗口大小,qt,layout,window,Qt,Layout,Window,我的对话框中有一个隐藏的小部件。当我显示它时,我希望对话框窗口相应地展开,并在选择隐藏它时再次缩小 如何做到这一点?我试图理解Qt的布局功能,但我发现很难理解 不确定是否有内置解决方案,但这是我的手动解决方案: Dialog::Dialog(QWidget *parent) : QDialog(parent) { setupUi(this); connect(toolButton, SIGNAL(toggled(bool)), SLOT(onToolButton(boo

我的对话框中有一个隐藏的小部件。当我显示它时,我希望对话框窗口相应地展开,并在选择隐藏它时再次缩小


如何做到这一点?我试图理解Qt的布局功能,但我发现很难理解

不确定是否有内置解决方案,但这是我的手动解决方案:

Dialog::Dialog(QWidget *parent) :
    QDialog(parent)
{
    setupUi(this);

    connect(toolButton, SIGNAL(toggled(bool)), SLOT(onToolButton(bool)));

    onToolButton(false);
}

void Dialog::onToolButton(bool checked)
{
    lineEdit->setVisible(checked);

    int maxHeight = verticalLayout->contentsMargins().top()
            + verticalLayout->contentsMargins().bottom();
    int itemsCount = 0;
    for (int i = 0; i < verticalLayout->count(); ++i) {
        QLayoutItem *item = verticalLayout->itemAt(i);
        if (item->widget()) {
            QWidget *w = item->widget();
            if (w->isVisible()) {
                maxHeight += w->geometry().height();
                ++itemsCount;
            }
        } else if (item->layout()) {
            QLayout *l = item->layout();
            maxHeight += l->geometry().height();
            ++itemsCount;
        }
    }
    if (itemsCount > 1)
        maxHeight += ((itemsCount - 1) * verticalLayout->spacing());

    setMaximumHeight(maxHeight);
}
Dialog::Dialog(QWidget*父项):
QDialog(父级)
{
setupUi(本);
连接(工具按钮、信号(切换(bool))、插槽(工具按钮(bool));
按钮(假);
}
无效对话框::onToolButton(布尔选中)
{
lineEdit->setVisible(选中);
int maxHeight=verticalLayout->contentsMargins().top()
+垂直布局->内容边缘().bottom();
int itemsunt=0;
对于(int i=0;icount();+i){
QLayoutItem*item=verticalLayout->itemAt(i);
如果(项->小部件()){
QWidget*w=项目->小部件();
如果(w->isVisible()){
maxHeight+=w->geometry().height();
++项目调查;
}
}else if(项目->布局()){
QLayout*l=项目->布局();
maxHeight+=l->geometry().height();
++项目调查;
}
}
如果(itemsCount>1)
maxHeight+=((ItemScont-1)*垂直布局->间距();
设置最大高度(最大高度);
}

在显示/隐藏内容后,尝试对容器使用QWidget::adjustSize()。

这可能会有所帮助:谢谢!工作起来很有魅力,而且是我遇到的最简单的解决办法。