qt minimumSize() returns 0 但在 qt designer 中它被设置为非零

qt minimumSize() returns 0 but in qt designer it is set to non-zero

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

但是由于某些原因

在自定义小部件的构造函数中调用 minimumSize.width()minimumSize().height() returns 0
InventoryItem::InventoryItem(QWidget* parent): QLabel(parent)
{
    qDebug() << minimumSize().width(); // 0 ???
    qDebug() << minimumSize().height(); // 0 ???
}

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

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

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

那里发生了什么??

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

main window 的构造函数从以下行开始:ui->setup(this);。这是对 moc 文件的 setup() 函数的调用,该文件自动为主 window 生成。此函数构造 InventoryItem,然后设置其最小大小。眼见为实,所以看一下构建项目的文件夹中的moc文件。因此,通过稍后在主要 window 的构造函数中调用 ui->thatWidget->minimumSize().width();,报告了预期的最小宽度 150。然而,在构造 InventoryItem 时,尚未设置最小尺寸,因此在其构造函数中调用 qDebug() << minimumSize().width(); 会报告最小宽度的默认值。 QWidgetdocumentation 声明最小尺寸:

By default, this property contains a size with zero width and height.

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