Qt 如何有一个固定大小的布局,也保持窗口的大小调整?
我有一个容器小部件 它的大小策略是“固定的”(垂直和水平)。 它已定义setMaxmimumWidth和setMaximumHeight 我在那里放了一个QHBoxLayout容器。向其中添加小部件(也具有固定的宽度/高度)。 但当我称之为“表演”时,这一切都得不到尊重。高度几乎是随机的,与布局中的任何内部小部件都不匹配,是最高项目的两倍,并且容器的宽度远远超出了我设置的固定宽度。Qt 如何有一个固定大小的布局,也保持窗口的大小调整?,qt,Qt,我有一个容器小部件 它的大小策略是“固定的”(垂直和水平)。 它已定义setMaxmimumWidth和setMaximumHeight 我在那里放了一个QHBoxLayout容器。向其中添加小部件(也具有固定的宽度/高度)。 但当我称之为“表演”时,这一切都得不到尊重。高度几乎是随机的,与布局中的任何内部小部件都不匹配,是最高项目的两倍,并且容器的宽度远远超出了我设置的固定宽度。 我错过了什么?为什么容器不能保持我定义的固定宽度/高度?为什么布局会干扰它,而不尊重它的约束?这种混乱来自于一个事
我错过了什么?为什么容器不能保持我定义的固定宽度/高度?为什么布局会干扰它,而不尊重它的约束?这种混乱来自于一个事实,即具有固定大小的小部件确实具有固定大小。以下情况适用:如果版面只有固定大小的小部件,那么版面的总体大小名义上是固定的,其中的小部件无法增长。如果将其设置为窗口上的布局,则如果对其设置
SetFixedSize
约束,则可以限制窗口的增长。在只有固定大小项目的布局的窗口上设置任何类型的大小策略都是无用的,除非您希望增大窗口小部件之间的间距
如果您希望您的小部件保持固定大小,但它们之间的间距会增大,那么下面代码需要做的唯一更改就是将所有小部件设置为固定大小策略。因为它们不能生长,所以间距是唯一可以生长的。严格地将示例中的所有策略设置为QSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed)
,您将获得此行为
如果您希望小部件具有一定的最小大小和可扩展性,以及整个容器小部件具有一定的最小大小,那么只需将其设置为这样。这意味着:
setMinimumSize
更改为setFixedSize
以获得具有固定大小的窗口,也可以同时设置最小和最大大小
#include <QApplication>
#include <QWidget>
#include <QHBoxLayout>
#include <QLabel>
#include <QFontDatabase>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget window;
QHBoxLayout layout(&window);
QLabel lbl1("one");
lbl1.setStyleSheet("QLabel { background-color: #FF8080 }");
lbl1.setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));
QLabel lbl2("two");
lbl2.setStyleSheet("QLabel { background-color: #80FF80 }");
lbl2.setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));
lbl2.setMinimumHeight(300);
QLabel lbl3("three");
lbl3.setStyleSheet("QLabel { background-color: #8080FF }");
lbl3.setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));
lbl3.setMinimumWidth(300);
layout.addWidget(&lbl1);
layout.addWidget(&lbl2);
layout.addWidget(&lbl3);
window.setMinimumSize(800, 800);
// Any combination of setMinimumSize and setMaximumSize is OK.
// If the minimum and maximum are the same, just do setFixedSize
window.show();
return a.exec();
}
#包括
#包括
#包括
#包括
#包括
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
QWidget窗口;
QHBoxLayout布局(窗口和窗口);
QLabel lbl1(“一”);
设置样式表(“QLabel{背景色:#FF8080}”);
lbl1.setSizePolicy(QSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed));
QLabel lbl2(“两个”);
设置样式表(“QLabel{背景色:#80FF80}”);
lbl2.setSizePolicy(QSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed));
lbl2.设置最小高度(300);
QLabel lbl3(“三”);
lbl3.setStyleSheet(“QLabel{背景色:#8080FF}”);
lbl3.setSizePolicy(QSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed));
lbl3.设置最小宽度(300);
layout.addWidget(&lbl1);
layout.addWidget(&lbl2);
layout.addWidget(&lbl3);
窗口设置最小尺寸(800800);
//setMinimumSize和setMaximumSize的任意组合都可以。
//如果最小值和最大值相同,只需执行setFixedSize
window.show();
返回a.exec();
}