【问题标题】:Qt Grid Layout Keep Widget From Moving, Alignment IgnoredQt Grid Layout 让小部件不移动,忽略对齐
【发布时间】:2021-02-26 23:35:48
【问题描述】:

我有一个网格布局,其中的小部件如下所示:

三个垂直部分是 qscroll 区域

现在,当我隐藏顶部按钮时,它看起来像这样:

当我隐藏顶部按钮而不是向上伸展时,如何让滚动区域中的按钮保持原位?

这是自动生成的 ui 设计器代码:

    /********************************************************************************
** Form generated from reading UI file 'designerth4586.ui'
**
** Created by: Qt User Interface Compiler version 5.9.5
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/

#ifndef DESIGNERTH4586_H
#define DESIGNERTH4586_H

#include <QtCore/QVariant>
#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QHeaderView>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QScrollArea>
#include <QtWidgets/QVBoxLayout>
#include <QtWidgets/QWidget>

QT_BEGIN_NAMESPACE

class Ui_Form
{
public:
    QGridLayout *gridLayout_4;
    QPushButton *pushButton;
    QScrollArea *scrollArea;
    QWidget *scrollAreaWidgetContents_6;
    QVBoxLayout *verticalLayout;
    QPushButton *pushButton_3;
    QPushButton *pushButton_5;
    QPushButton *pushButton_2;
    QPushButton *pushButton_4;
    QScrollArea *scrollArea_2;
    QWidget *scrollAreaWidgetContents_7;
    QVBoxLayout *verticalLayout_2;
    QPushButton *pushButton_7;
    QPushButton *pushButton_6;
    QPushButton *pushButton_9;
    QPushButton *pushButton_8;
    QScrollArea *scrollArea_3;
    QWidget *scrollAreaWidgetContents_8;
    QVBoxLayout *verticalLayout_3;
    QPushButton *pushButton_13;
    QPushButton *pushButton_11;
    QPushButton *pushButton_10;
    QPushButton *pushButton_12;

    void setupUi(QWidget *Form)
    {
        if (Form->objectName().isEmpty())
            Form->setObjectName(QStringLiteral("Form"));
        Form->resize(743, 851);
        gridLayout_4 = new QGridLayout(Form);
        gridLayout_4->setObjectName(QStringLiteral("gridLayout_4"));
        pushButton = new QPushButton(Form);
        pushButton->setObjectName(QStringLiteral("pushButton"));
        QSizePolicy sizePolicy(QSizePolicy::Minimum, QSizePolicy::Preferred);
        sizePolicy.setHorizontalStretch(0);
        sizePolicy.setVerticalStretch(1);
        sizePolicy.setHeightForWidth(pushButton->sizePolicy().hasHeightForWidth());
        pushButton->setSizePolicy(sizePolicy);

        gridLayout_4->addWidget(pushButton, 0, 0, 1, 3);

        scrollArea = new QScrollArea(Form);
        scrollArea->setObjectName(QStringLiteral("scrollArea"));
        scrollArea->setWidgetResizable(true);
        scrollAreaWidgetContents_6 = new QWidget();
        scrollAreaWidgetContents_6->setObjectName(QStringLiteral("scrollAreaWidgetContents_6"));
        scrollAreaWidgetContents_6->setGeometry(QRect(0, 0, 236, 549));
        verticalLayout = new QVBoxLayout(scrollAreaWidgetContents_6);
        verticalLayout->setObjectName(QStringLiteral("verticalLayout"));
        pushButton_3 = new QPushButton(scrollAreaWidgetContents_6);
        pushButton_3->setObjectName(QStringLiteral("pushButton_3"));

        verticalLayout->addWidget(pushButton_3);

        pushButton_5 = new QPushButton(scrollAreaWidgetContents_6);
        pushButton_5->setObjectName(QStringLiteral("pushButton_5"));

        verticalLayout->addWidget(pushButton_5);

        pushButton_2 = new QPushButton(scrollAreaWidgetContents_6);
        pushButton_2->setObjectName(QStringLiteral("pushButton_2"));

        verticalLayout->addWidget(pushButton_2);

        pushButton_4 = new QPushButton(scrollAreaWidgetContents_6);
        pushButton_4->setObjectName(QStringLiteral("pushButton_4"));

        verticalLayout->addWidget(pushButton_4);

        scrollArea->setWidget(scrollAreaWidgetContents_6);

        gridLayout_4->addWidget(scrollArea, 1, 0, 1, 1);

        scrollArea_2 = new QScrollArea(Form);
        scrollArea_2->setObjectName(QStringLiteral("scrollArea_2"));
        scrollArea_2->setWidgetResizable(true);
        scrollAreaWidgetContents_7 = new QWidget();
        scrollAreaWidgetContents_7->setObjectName(QStringLiteral("scrollAreaWidgetContents_7"));
        scrollAreaWidgetContents_7->setGeometry(QRect(0, 0, 235, 549));
        verticalLayout_2 = new QVBoxLayout(scrollAreaWidgetContents_7);
        verticalLayout_2->setObjectName(QStringLiteral("verticalLayout_2"));
        pushButton_7 = new QPushButton(scrollAreaWidgetContents_7);
        pushButton_7->setObjectName(QStringLiteral("pushButton_7"));

        verticalLayout_2->addWidget(pushButton_7);

        pushButton_6 = new QPushButton(scrollAreaWidgetContents_7);
        pushButton_6->setObjectName(QStringLiteral("pushButton_6"));

        verticalLayout_2->addWidget(pushButton_6);

        pushButton_9 = new QPushButton(scrollAreaWidgetContents_7);
        pushButton_9->setObjectName(QStringLiteral("pushButton_9"));

        verticalLayout_2->addWidget(pushButton_9);

        pushButton_8 = new QPushButton(scrollAreaWidgetContents_7);
        pushButton_8->setObjectName(QStringLiteral("pushButton_8"));

        verticalLayout_2->addWidget(pushButton_8);

        scrollArea_2->setWidget(scrollAreaWidgetContents_7);

        gridLayout_4->addWidget(scrollArea_2, 1, 1, 1, 1);

        scrollArea_3 = new QScrollArea(Form);
        scrollArea_3->setObjectName(QStringLiteral("scrollArea_3"));
        QSizePolicy sizePolicy1(QSizePolicy::Expanding, QSizePolicy::Expanding);
        sizePolicy1.setHorizontalStretch(0);
        sizePolicy1.setVerticalStretch(2);
        sizePolicy1.setHeightForWidth(scrollArea_3->sizePolicy().hasHeightForWidth());
        scrollArea_3->setSizePolicy(sizePolicy1);
        scrollArea_3->setWidgetResizable(true);
        scrollAreaWidgetContents_8 = new QWidget();
        scrollAreaWidgetContents_8->setObjectName(QStringLiteral("scrollAreaWidgetContents_8"));
        scrollAreaWidgetContents_8->setGeometry(QRect(0, 0, 236, 549));
        verticalLayout_3 = new QVBoxLayout(scrollAreaWidgetContents_8);
        verticalLayout_3->setObjectName(QStringLiteral("verticalLayout_3"));
        pushButton_13 = new QPushButton(scrollAreaWidgetContents_8);
        pushButton_13->setObjectName(QStringLiteral("pushButton_13"));

        verticalLayout_3->addWidget(pushButton_13);

        pushButton_11 = new QPushButton(scrollAreaWidgetContents_8);
        pushButton_11->setObjectName(QStringLiteral("pushButton_11"));

        verticalLayout_3->addWidget(pushButton_11);

        pushButton_10 = new QPushButton(scrollAreaWidgetContents_8);
        pushButton_10->setObjectName(QStringLiteral("pushButton_10"));

        verticalLayout_3->addWidget(pushButton_10);

        pushButton_12 = new QPushButton(scrollAreaWidgetContents_8);
        pushButton_12->setObjectName(QStringLiteral("pushButton_12"));

        verticalLayout_3->addWidget(pushButton_12);

        scrollArea_3->setWidget(scrollAreaWidgetContents_8);

        gridLayout_4->addWidget(scrollArea_3, 1, 2, 1, 1);


        retranslateUi(Form);
        QObject::connect(pushButton, SIGNAL(clicked()), pushButton, SLOT(hide()));

        QMetaObject::connectSlotsByName(Form);
    } // setupUi

    void retranslateUi(QWidget *Form)
    {
        Form->setWindowTitle(QApplication::translate("Form", "Form", Q_NULLPTR));
        pushButton->setText(QApplication::translate("Form", "PushButton", Q_NULLPTR));
        pushButton_3->setText(QApplication::translate("Form", "PushButton", Q_NULLPTR));
        pushButton_5->setText(QApplication::translate("Form", "PushButton", Q_NULLPTR));
        pushButton_2->setText(QApplication::translate("Form", "PushButton", Q_NULLPTR));
        pushButton_4->setText(QApplication::translate("Form", "PushButton", Q_NULLPTR));
        pushButton_7->setText(QApplication::translate("Form", "PushButton", Q_NULLPTR));
        pushButton_6->setText(QApplication::translate("Form", "PushButton", Q_NULLPTR));
        pushButton_9->setText(QApplication::translate("Form", "PushButton", Q_NULLPTR));
        pushButton_8->setText(QApplication::translate("Form", "PushButton", Q_NULLPTR));
        pushButton_13->setText(QApplication::translate("Form", "PushButton", Q_NULLPTR));
        pushButton_11->setText(QApplication::translate("Form", "PushButton", Q_NULLPTR));
        pushButton_10->setText(QApplication::translate("Form", "PushButton", Q_NULLPTR));
        pushButton_12->setText(QApplication::translate("Form", "PushButton", Q_NULLPTR));
    } // retranslateUi

};

namespace Ui {
    class Form: public Ui_Form {};
} // namespace Ui

QT_END_NAMESPACE

#endif // DESIGNERTH4586_H

【问题讨论】:

  • @JarMan 已编辑以包含最小的、可重现的示例。
  • 所以您希望顶部的大按钮在隐藏时继续占据其空间?见Hiding Qt widget and keeping widget space
  • 已解决:我想通了,我的 qscrollarea 的最大高度没有设置为 16777215,我还必须用 qframe 替换 qscrollarea,并在其中的项目顶部放置一个垂直间隔

标签: qt


【解决方案1】:

尝试在附加垂直布局中使用 height==0 的垂直间隔项:

--------
 spacer
--------
TTTTTTTT
TTTTTTTT
TTTTTTTT
11223333
11223333
11223333
11223333
--------

【讨论】:

  • 我试图让第 1 部分不拉伸,顶部的那个垫片什么都不做
  • 将顶部按钮放入容器小部件并为其设置最小高度和最大高度,现在您可以隐藏按钮而不会拉伸其他按钮
猜你喜欢
  • 2019-11-10
  • 1970-01-01
  • 1970-01-01
  • 2018-03-03
  • 1970-01-01
  • 2018-08-21
  • 2019-09-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多