【问题标题】:qt minimumSize() returns 0 but in qt designer it is set to non-zeroqt minimumSize() 返回 0 但在 qt 设计器中它设置为非零
【发布时间】: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 编程。

那里发生了什么??

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

【问题讨论】:

    标签: c++ qt qt5 qwidget qlabel


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-04
      • 1970-01-01
      • 2021-01-20
      • 1970-01-01
      • 2013-08-06
      • 2012-12-04
      相关资源
      最近更新 更多