题
我怎么会去调整大小的部件时重儿童隐藏,使它看起来如在第一形象?主要布局是一个QVBoxLayout,试的孩子是一个小部件与QVBoxLayout。
我试图如下:
- 更新()
- updateGeometry()
- setGeometry(childrenRect())
- 布局()->启动()
在主要部件,尽快为我已经设置的试部件,以隐藏。我需要截获的一些活动做到这一点?
解决方案
的 adjustSize
功能可以做你想做的。
其他提示
这是一个基本的例子,它不会自动调整后的部件隐藏或展示。
对话。h文件:
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include <QtGui>
class dialog : public QDialog
{
Q_OBJECT
public:
explicit dialog(QWidget *parent = 0)
{
vlayout.addWidget(&checkbox);
vlayout.addWidget(&label);
label.setText("Label");
setLayout(&vlayout);
this->layout()->setSizeConstraint(QLayout::SetFixedSize); // !!! This is the what makes it auto-resize
checkbox.setChecked(true);
connect(&checkbox,SIGNAL(toggled(bool)),&label,SLOT(setVisible(bool)));
}
private:
QVBoxLayout vlayout;
QCheckBox checkbox;
QLabel label;
};
#endif // DIALOG_H
和主。c
#include <QApplication>
#include "dialog.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
dialog d;
d.show();
return a.exec();
}
这是一个我刚刚开发了一个答案!!!(注:这将是给予在PyQt4形式)
我们需要能够重新尺寸的我的程序的窗口时显示出和隐藏额外的小组。然而在过去,我结束了只是重新配置的用户界面和/或工作流程,以便重新调整大小的窗口中不是必要的。但是现在它是一个需要必须的。
该窗口可以被重新型期间在其创作。该窗口可以被重新型的直接(例如自我。调整(xSize,ySize) 但是如果你创建的一些代码行捕捉到需要的尺寸,隐藏了所需的部分,重新计算是什么大小应,重新大小似乎不可取的。
(实例)
curHgt = self.size().height()
curWth = self.size().width()
myFrmHgt = self.ui.reviewFrm.size().height()
self.ui.reviewFrm.hide()
self.resize( curWth, (curHgt - myFrmHgt ) )
什么都没有。不会的工作。为什么不呢?
今天是寻找答案还是没有拿出一个可行的回答。有几个供选择。亨特的部件的层次结构,使其失效,adjustSize.一个相当详尽的布局握,就不会工作如果你正在尝试重新大小的主要窗口。还有一个压倒性响应的说来设置你的约束FixedSize.但是,这不失败的整个目的,有点像是说要切断你的手从手腕处如果你有一个挂钉子。
但是我偶然遇到的人,取得了一些成功的挖掘中发现的原因的重大不把保留是因为排队发布活动,将重置的调整。
他的解决办法是运行QApplication.sendPostedEvents()只是在做你的应用重大,使得排队的事件不要重设你的窗口。是的,没有。是的,这是解决方案,并且我是肯定的还有一个漂亮的方式这样做,但你需要真正的摇动的队列出的像个洗漆滚第一次。
这是我的简单段,我设立,迄今为止似乎是固体。
result = [ self.size().width(), self.size().height() ]
if self.ui.reviewFrm.isVisible():
result[1] -= self.ui.reviewFrm.size().height()
self.ui.reviewFrm.hide()
while self.size().height() > result[1]:
self.appy.sendPostedEvents()
self.resize( result[0], result[1] )
不。这是不是很漂亮。然而,在大多数我只看到它摇滚油漆前两次公布的事件允许的窗口来调整。没有必要锁的限制或动摇的父部件或爬上通过的层次寻找大小的提示。
我的问题是一个小小的不同在于,我有一顶级QWidget(而不是一个QDialog或QMainWindow),有儿童在的布局。当这些儿童被调整到 大, ,QWidget将调整到适应,而不是当他们成为较小。就像上所述,该区域只有空的空间。我终于找到一个解决方案:
布局使用在我QWidget有财产称为setSizeConstraint().这是通常设定为"QLayout::SetDefaultConstraint",这简单地影响的"最小大小"的QWidget拥有它。相反,我选择了"QLayout::SetFixedSize"的布局调整 固定 尺寸的拥有QWidget,有效地使它更小时的需要。
如果你想要你的小工具将可调整后设定 QLayout::SetFixedSize
你也会需要复盖 QWidget::resizeEvent()
.
void resizeEvent(QResizeEvent* event) override {
QWidget::resizeEvent(event);
layout()->setSizeConstraint(QLayout::SetMinAndMaxSize);
};