【问题标题】:QWidget::setFixedHeight() not working/still resizableQWidget::setFixedHeight() 不工作/仍可调整大小
【发布时间】:2013-03-25 10:29:22
【问题描述】:

我最近迁移到 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 连接到一个输出dialogminimumHeightmaximumHeightsizeHint.height() 和当前height 的插槽,就像@987654328 @ 多于。当我调整对话框大小时,有时它的当前高度超过了它的最大高度。这怎么可能?!

【问题讨论】:

    标签: c++ qt5 qwidget qdialog


    【解决方案1】:

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

    或者,您可以覆盖对话框的resizeEvent() 并手动禁用所有高度更改...

    【讨论】:

    • 我没有设置 sizepolicy,我正在设置 fixedHeight。看看我的代码。抱歉,我可能会否决您的回答。
    • 更新:查看文档后,QHBoxLayouts 没有 setFixedHeight() 方法。会否决你的答案。编辑:哎呀,看起来我不能。哦,好吧。
    猜你喜欢
    • 2012-02-15
    • 1970-01-01
    • 1970-01-01
    • 2011-11-23
    • 2017-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-17
    相关资源
    最近更新 更多