QWidget::setFixedHeight()不工作/仍然可调整大小

QWidget::setFixedHeight() not working/still resizable

本文关键字:可调整 工作 setFixedHeight QWidget      更新时间:2023-10-16

我最近搬到了Qt5,遇到了一个我在Qt4没有得到的问题。

我有一个模态对话框,需要有一个固定的高度,但可调整的宽度。为了演示,这里有一个简化的版本。

    QDialog dialog;
    QHBoxLayout hLayout;
    QLineEdit lineEdit;
    QPushButton button("Check Current Height");
    hLayout.addWidget(&lineEdit);
    hLayout.addWidget(&button);
    dialog.setLayout(&hLayout);
    dialog.setFixedHeight(dialog.sizeHint().height());
    qDebug() << dialog.height()
             << dialog.sizeHint().height()
             << dialog.minimumHeight()
             << dialog.maximumHeight();
    dialog.exec();

即使我使用setMinimumHeight &setMaximumHeight而不是setFixedHeight,它仍然可以调整大小。

在上面的例子中,所有输入到qDebug中的内容都是相等的。如果最小和最大高度相等,对话框不应该调整大小。但在这里,它是。

值得一提的是,在没有setFixedHeight的情况下,对话框可以完全调整大小,而有了setFixedHeight,对话框只能调整到某一点。

更新:我已经将button连接到输出dialogminimumHeight, maximumHeight, sizeHint.height()和当前height的插槽,就像上面的qDebug()一样。当我调整对话框的大小时,有时它的当前高度超过了它的最大高度。这怎么可能?!

我发现了这个SO帖子,在这个投票最多的回答中,我可以读到在顶级窗口设置大小策略不起作用。也许如果你在你的对话框中使用setLayout()方法,并在你的对话框的主布局中使用setFixedHeight(),那么它就会起作用。

或者你可以覆盖你的对话框的resizeEvent()和手动禁用所有的高度变化…