首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何避免隐藏的QWidget高度包含在QStackedLayout中?

如何避免隐藏的QWidget高度包含在QStackedLayout中?
EN

Stack Overflow用户
提问于 2020-08-28 17:50:49
回答 1查看 127关注 0票数 0

我有这样一种情况,我为之奋斗了几个小时:

我有一个主小部件,其布局设置为main_layout,在此之前,三个布局被添加到main_layout中。

第二代(header_app_layout)

  • A (header_loader_layout)

  • A QStackBoxLayout (content_layout)

  1. A QVBoxLayout

QStackBoxLayout (content_layout)中添加了两个子小部件,其中仅显示了一个:

  1. m_content1_widget (显示widget)
  2. m_content2_widget

)

我的问题是,content_layout正在考虑小部件:m_content1_widget中隐藏子小部件的高度,因为main_widget高度是溢出的。如果我将content_layoutQStackedLayout类型更改为QVBoxLayout类型,则一切都会正常工作。因此,在我看来,QStackedLayout尊重隐藏小部件的高度,我不希望它这样做。有什么办法可以克服这个问题吗?以下是代码:

main.cpp

代码语言:javascript
代码运行次数:0
运行
复制
int main(int argc, char* argv[])
{
    QApplication app(argc, argv);
    main_widget w;
    w.setFixedSize(400, 400);
    w.show();
    return app.exec();
}

main_widget.h

代码语言:javascript
代码运行次数:0
运行
复制
#include <QWidget>
#include <QLabel>
#include <QStackedLayout>
#include <QVBoxLayout>
#include <QPushButton>

class main_widget : public QWidget
{
    Q_OBJECT

public:
    main_widget();
};

main_widget.cpp

代码语言:javascript
代码运行次数:0
运行
复制
#include "main_widget.h"

main_widget::main_widget()
    : QWidget(nullptr)
{
    QVBoxLayout *header_app_layout = new QVBoxLayout();
    QLabel *header_app_label = new QLabel();
    header_app_label->setText(tr("Header"));
    header_app_layout->addWidget(header_app_label);

    QVBoxLayout* header_loader_layout = new QVBoxLayout();
    QLabel* header_loader_label = new QLabel();
    header_loader_label->setText(tr("Header Loader"));
    header_loader_layout->addWidget(header_loader_label);

    QWidget *m_content1_widget = new QWidget();
    QVBoxLayout* content1_layout = new QVBoxLayout(m_content1_widget);
    QPushButton* content1_button1 = new QPushButton(tr("content1_button1"));
    content1_layout->addWidget(content1_button1);
    QPushButton* content1_button2 = new QPushButton(tr("content1_button2"));
    content1_layout->addWidget(content1_button2);
    QPushButton* content1_button3 = new QPushButton(tr("content1_button3"));
    content1_layout->addWidget(content1_button3);
    content1_button2->hide(); //Hidden for now. But it's height is being included
    content1_button3->hide();

    QWidget* m_content2_widget = new QWidget();
    QVBoxLayout* content2_layout = new QVBoxLayout(m_content2_widget);
    QPushButton* content2_button1 = new QPushButton(tr("content2_button1"));
    content2_layout->addWidget(content2_button1);
    QPushButton* content2_button2 = new QPushButton(tr("content2_button2"));
    content2_layout->addWidget(content2_button2);
    QPushButton* content2_button3 = new QPushButton(tr("content2_button3"));
    content2_layout->addWidget(content2_button3);
    content2_button2->hide();
    content2_button3->hide();


    QStackedLayout* content_layout = new QStackedLayout(); //Doesn't work
    //QVBoxLayout *content_layout = new QVBoxLayout(); //Works, but I need it to be of type `QStackedLayout` to show the 2 child widgets conditionally
    content_layout->addWidget(m_content1_widget);
    content_layout->addWidget(m_content2_widget);
    content_layout->setStackingMode(QStackedLayout::StackingMode::StackOne);
    content_layout->setCurrentIndex(0);

    QVBoxLayout* main_layout = new QVBoxLayout;
    main_layout->addLayout(header_app_layout); //Adding a QVBoxLayout
    main_layout->addLayout(header_loader_layout); //Adding another QVBoxLayout
    main_layout->addSpacing(32);
    main_layout->addLayout(content_layout); //Adding the QStackedLayout

    this->setLayout(main_layout);
}
EN

回答 1

Stack Overflow用户

发布于 2020-09-21 07:07:43

我能够通过调用adjustSize on m_content2_widget来解决这个问题,这消除了m_content2_widget中隐藏控件占用的空间。

代码语言:javascript
代码运行次数:0
运行
复制
m_content2_widget->adjustSize();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63638705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档