QLayout强制父QWidget调整大小,即使我不想要它

时间:2011-09-14 18:29:33

标签: qt layout

我正在使用一个QListWidget,它填充了我自己的自定义菜单项小部件的实例。菜单项小部件由带有QHBoxLayout的QWidget和几个QLabel组成。

我对所有事情感到满意,除了QHBoxLayout似乎接管我的小部件的大小,缩小我的小部件高度以使其适合其中包含的标签。我希望菜单项小部件是一个恒定的大小,只是让QHBoxLayout水平排列它的子项,它让我疯狂,它接管了小部件的高度!

有没有人有任何想法?我在我的菜单项QWidget中尝试了以下内容:

this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
this->resize(10, 30);

希望忽略(并扩展)10并且30将保持固定,但小部件的尺寸要小得多。

谢谢!

马龙

3 个答案:

答案 0 :(得分:1)

调整大小 - 更改窗口小部件的几何图形 - 不是您使用Fixed尺寸策略的方式。您需要在自己重新实现QSize sizeHint() const时给出固定大小。将以下内容添加到窗口小部件:

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

Per Qt自己的文档:

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

答案 1 :(得分:0)

所以基本上你希望Qlabels在QHBoxLayout而不是完整的小部件? 如果是这种情况,那么您只需将QLabel添加到QHBoxLayout并将其添加到菜单项小部件(不要使用QHBoxLayout设置菜单项小部件)

答案 2 :(得分:0)

未经测试,但也许是一个想法:layout->setSizeConstraint( QLayout::SetNoConstraint )可能与widget->setFixedHeight()结合使用。祝你好运!