【发布时间】:2018-02-02 09:16:01
【问题描述】:
我有一个小部件,其中QVBoxLayout 作为主布局,QGridLayout 作为嵌套在主布局中的子布局。有一个切换按钮,可以显示/隐藏网格布局中的某些小部件。更新可见性后,我想调整(最小化)小部件的大小。但是当子小部件被隐藏时调整大小不能正常工作,小部件大小保持不变,它没有像我预期的那样缩小。此外,小部件未正确重绘,一些坏按钮片段仍然可见。我观察到,如果网格布局是主要布局(即没有垂直布局),则不会发生这种情况,但如果它嵌套在另一个布局中,它的行为就会很奇怪。任何想法如何解决这个问题?
widget.h:
#pragma once
#include <QWidget>
class QGridLayout;
class QPushButton;
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
private:
void updateVisibility();
QGridLayout *m_layout;
QPushButton *m_button;
};
widget.cpp:
#include "widget.h"
#include <QGridLayout>
#include <QLabel>
#include <QPushButton>
Widget::Widget(QWidget *parent) :
QWidget(parent)
{
m_layout = new QGridLayout();
m_layout->addWidget(new QLabel("Label1"), 0, 0);
m_layout->addWidget(new QLabel("Label2"), 1, 0);
m_button = new QPushButton("Visible");
connect(m_button, &QPushButton::clicked, this, &Widget::updateVisibility);
m_button->setCheckable(true);
m_button->setChecked(false);
auto layout = new QVBoxLayout(this);
layout->addLayout(m_layout);
layout->addWidget(m_button);
updateVisibility();
}
void Widget::updateVisibility()
{
// hide or show Label2
m_layout->itemAtPosition(1, 0)->widget()->setVisible(m_button->isChecked());
adjustSize();
}
之前:
点击按钮2次后:
更新:我将此报告为错误https://bugreports.qt.io/browse/QTBUG-66151,但我想找到一个合适的解决方法,直到它被修复。
【问题讨论】: