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();
会报告最小宽度的默认值。 QWidget 的 documentation 声明最小尺寸:
By default, this property contains a size with zero width and height.
简而言之,世界仍在运转,即您观察到的行为是预期的行为。
有一个继承自 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();
会报告最小宽度的默认值。 QWidget 的 documentation 声明最小尺寸:
By default, this property contains a size with zero width and height.
简而言之,世界仍在运转,即您观察到的行为是预期的行为。