QLayout会强制调整父QWidget的大小,即使我不希望它这样做。

3
我正在使用一个QListWidget,其中填充了我自己定制的菜单项小部件的实例。菜单项小部件由一个带有QHBoxLayout和多个QLabel的QWidget组成。
除了QHBoxLayout似乎占据了我的小部件的大小,缩小了我的小部件高度以适应其中包含的标签之外,我对一切都感到满意。我希望菜单项小部件是一个恒定的大小,并且只是让QHBoxLayout水平排列其子元素,它占据了小部件的高度,这让我很疯狂!
有人有任何想法吗?我在我的菜单项QWidget中尝试了一些东西,例如:
this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
this->resize(10, 30);

希望将十忽略(扩展),三十保持固定,但是小部件仍然被缩小了很多。
谢谢!
马龙
3个回答

1

调整大小——改变小部件的几何形状——不是使用Fixed大小策略的方法。您需要在自己重新实现的QSize sizeHint() const中提供固定大小。将以下内容添加到您的小部件中:

class MyWidget : public QWidget {
...
protected:
    QSize sizeHint() const { return QSize(10, 30); }
...
};

根据Qt的官方文档:
QSizePolicy::Fixed QWidget::sizeHint()是唯一可接受的替代方案,因此小部件永远不会增长或缩小(例如,推按钮的垂直方向)。

0

没有测试过,但也许有一个想法:layout->setSizeConstraint(QLayout::SetNoConstraint),也许结合widget->setFixedHeight()使用。祝你好运!


0

所以基本上你想让QLabel在QHBoxLayout中而不是整个小部件中吗? 如果是这样,那么你可以简单地将只有QLabels添加到QHBoxLayout中,并将其添加到你的菜单项小部件中(不要使用QHBoxLayout设置菜单项小部件)


我实际上找到了一种方法来解决它。我将QHBoxLayout的边距设置为0:layout->setContentsMargins(5, 0, 0, 0);然后将标签的最大和最小高度设置为30:label->setMaximumHeight(30); label->setMinimumHeight(30);布局仍然会调整我的小部件以适应标签的高度,但标签本身提供了我想要的“填充”空间。布局仍然占用其父窗口小部件的大小似乎有些奇怪,但没关系。 - user672033
这个布局只适用于子元素,而不适用于父元素。也许你可以尝试另一种布局,其中包含了父元素。 - Chenna V
是的,这很奇怪。它适用于子元素,但会调整父元素的大小以适应子元素的最小尺寸。不过还是谢谢你的帮助。 - user672033

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接