qt minimumSize() 返回 0 但在 qt 设计器中它设置为非零

Posted

技术标签:

【中文标题】qt minimumSize() 返回 0 但在 qt 设计器中它设置为非零【英文标题】:qt minimumSize() returns 0 but in qt designer it is set to non-zero 【发布时间】:2017-11-04 11:27:51 【问题描述】:

有一个继承自 QLabel 的自定义小部件,它被提升为高级功能。 它的 minimumSize(宽度和高度)在 qt 设计器中设置为 150。

但是由于某种原因,自定义小部件的构造函数中对minimumSize.width()minimumSize().height() 的调用返回0

InventoryItem::InventoryItem(QWidget* parent): QLabel(parent)

    qDebug() << minimumSize().width(); // 0 ???
    qDebug() << minimumSize().height(); // 0 ???

但是,它从主窗口构造函数返回正确的值 (150, 150) 通过调用ui-&gt;thatWidget-&gt;minimumSize().width(); // 150, ... 和高度相同

主窗口上的小部件也有垂直和水平布局。

我只是不太熟悉 QT 中的 GUI 编程。

那里发生了什么??

如何从自定义小部件中获取正确的值??

【问题讨论】:

【参考方案1】:

主窗口的构造函数以以下行开头:ui-&gt;setup(this);。这是对主窗口自动生成的 moc 文件的setup() 函数的调用。此函数构造 InventoryItem,然后设置其最小尺寸。眼见为实,看一下项目所在文件夹中的moc文件。因此,稍后在主窗口的构造函数中调用ui-&gt;thatWidget-&gt;minimumSize().width(); 会报告预期的最小宽度150。然而,在构造 InventoryItem 时,尚未设置最小尺寸,因此在其构造函数中调用 qDebug() &lt;&lt; minimumSize().width(); 会报告最小宽度的默认值。 QWidget 的documentation 状态为最小尺寸:

默认情况下,此属性包含一个宽度和高度为零的大小。

简而言之,世界仍在运转,即您观察到的行为是预期的。

【讨论】:

以上是关于qt minimumSize() 返回 0 但在 qt 设计器中它设置为非零的主要内容,如果未能解决你的问题,请参考以下文章

Qt - 尝试在布局中对齐两个 GroupBox

Qt designer中如何指定pushButton的大小,比如多少*多少像素

在 QML 中使用 C++-slot,它返回命名空间中的类型

我使用QT5.0.1写的程序在自己有安装QT的电脑上能正常运行,但在没安装QT的电脑上会出错,我把BIN

Ostream tellp 在 Windows 上失败,但在 Linux 上失败

Qt QFile::size() 总是返回 0