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->thatWidget->minimumSize().width(); // 150
, ... 和高度相同
主窗口上的小部件也有垂直和水平布局。
我只是不太熟悉 QT 中的 GUI 编程。
那里发生了什么??
如何从自定义小部件中获取正确的值??
【问题讨论】:
【参考方案1】:主窗口的构造函数以以下行开头:ui->setup(this);
。这是对主窗口自动生成的 moc 文件的setup()
函数的调用。此函数构造 InventoryItem,然后设置其最小尺寸。眼见为实,看一下项目所在文件夹中的moc文件。因此,稍后在主窗口的构造函数中调用ui->thatWidget->minimumSize().width();
会报告预期的最小宽度150。然而,在构造 InventoryItem 时,尚未设置最小尺寸,因此在其构造函数中调用 qDebug() << minimumSize().width();
会报告最小宽度的默认值。 QWidget 的documentation 状态为最小尺寸:
默认情况下,此属性包含一个宽度和高度为零的大小。
简而言之,世界仍在运转,即您观察到的行为是预期的。
【讨论】:
以上是关于qt minimumSize() 返回 0 但在 qt 设计器中它设置为非零的主要内容,如果未能解决你的问题,请参考以下文章
Qt designer中如何指定pushButton的大小,比如多少*多少像素
在 QML 中使用 C++-slot,它返回命名空间中的类型
我使用QT5.0.1写的程序在自己有安装QT的电脑上能正常运行,但在没安装QT的电脑上会出错,我把BIN