2015-05-29 86 views
1

定义布局的几何形状在自定义QWidget(比如MyWidget)我有一个布局管理孩子部件:在QT,如何在自定义的Widget

MyWidget window; 
QPushButton button; 
QVBoxLayout layout(window); 
layout.addWidget(button); 
window.show(); 

我想的布局是在一个特定的位置和大小,默认情况下,QWidget将其设置为整个几何体。

如何设置layout考虑管理其空间的几何图形?

作为间接问题: 布局使用哪种函数来设置子几何?

回答

1
QPushButton *button = new QPushButton; 
verticalLayout->addSpacing(300); 
verticalLayout->addWidget(button); 
button->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); 
button->setMinimumSize(500, 200); 
button->setMaximumSize(500, 200); 

如果您需要垂直和水平间距 - 请使用QGridLayout

+1

对于特定的GUI,这是一个很好的答案,但不是作为该问题的通用解决方案。问题是关于如何从自定义窗口小部件的角度定义布局使用的内部几何。重写布局的“setGeometry”功能以设置QRect也很容易;但是,这又不是一个通用的解决方案。 –

+0

如果您需要固定的窗口大小和固定的窗口小部件的位置 - 您只是不使用布局。 – Amartel

+1

我不需要固定的大小和位置,而是以一种允许任何布局和任何GUI设置的方式实现MyWidget。 –

0

的QLayout用作边缘两者的总结:

  • 父插件内容边距。
  • 布局内容边距。

解决方法是将内容页边距设置为自定义窗口小部件构造函数中的所需值。和创建布局时,对他的内容边距设置为0。

this->setContentsMargins(left, top, right, bottom); 
// ... 
layout->setContentsMargins(0,0,0,0); 

布局setGeometry被称为QWidget的调整事件,并设置孩子的小部件的大小与它根据。由于所有功能都不是虚拟的,因此在此行为中修改是不可能的(或至少很难)。