【问题标题】:How to get current width of QWidget inside responsive QVBoxLayout?如何在响应式 QVBoxLayout 中获取 QWidget 的当前宽度?
【发布时间】:2016-04-06 11:10:02
【问题描述】:

我目前正在尝试使垂直滚动条的步长适应可滚动和响应式 QVBoxLayout 内对象的高度。因此,一个滚动步骤恰好向下滚动一个小部件。 QVBoxLayout 中的所有对象都具有相同的几何形状。

因此,我需要 QVBoxLayout 内的一个对象的当前(实时)高度。我已经尝试了以下方法:

对象初始化高度为 300(不固定)。 然后通过调整包含 QVBoxLayout 的窗口大小来动态调整高度。

QWidget* pWidget = PointerToMyWidgetInsideQVBoxLayout;
std::cout << "height:" << pWidget->height() << std::endl; /// @todo PHIL: height gives only initial value, not current height
std::cout << "geometry-height:" << pWidget->geometry().height() << std::endl;
std::cout << "frameSize-height:" << pWidget->frameSize().height() << std::endl;
std::cout << "frameGeometry-height:" << pWidget->frameGeometry().height() << std::endl;
std::cout << "normalGeometryheight:" << pWidget->normalGeometry().height() << std::endl;
std::cout << "minimumHeight-height:" << pWidget->minimumHeight() << std::endl;
std::cout << "maximumHeight-height:" << pWidget->maximumHeight() << std::endl;
std::cout << "sizeHint-height:" << pWidget->sizeHint().height() << std::endl;

这会产生以下输出:

height:300
geometry-height:300
frameSize-height:300
frameGeometry-height:300
normalGeometryheight:300
minimumHeight-height:0
maximumHeight-height:16777215
sizeHint-height:50

非常感谢您的帮助!

【问题讨论】:

  • 每次调整小部件的大小时可能会做一个std::cout
  • 子类 QWidget 并覆盖 resizeEvent。然后在那里发出一些信号,发送一个新的大小作为参数。或者,如果您不想子类化,只需 install an event filter
  • 你的问题是什么?您输出的值在您获得它们时是正确的在调整小部件大小之后,提示提示,由您自己获取值。

标签: c++ qt size qwidget


【解决方案1】:

QWidget::height() 方法返回小部件的实际大小,而不仅仅是初始化时的大小:参见answer

【讨论】:

  • 感谢您的帮助。我发现了问题:我在事件循环执行小部件调整大小之前请求了高度。
猜你喜欢
  • 1970-01-01
  • 2015-11-22
  • 1970-01-01
  • 2016-12-17
  • 1970-01-01
  • 2020-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多