![](/img/trans.png)
[英]QLabel::setPixmap() and QScrollArea::setWidget()
[英]QScrollArea::ensureVisible() and QScrollArea::setWidget()
在获得上一个帮助之后,我遇到了QScrollArea
另一个问题,这有点相似。
现在的问题是,如果您创建滚动区域和标签,将标签设置为滚动区域的小部件,然后在 setWidget()
之后将图像加载到标签中,则确保ensureVisible()
不执行任何操作:
此示例说明了问题,只需将/path/to/some/image.png
替换为计算机上的某些真实图像即可:
QScrollArea *scrollArea = new QScrollArea;
QLabel *label = new QLabel(scrollArea);
scrollArea->setWidgetResizable(true);
scrollArea->setWidget(label);
label->setPixmap(QPixmap("/path/to/some/image.png"));
label->setFixedSize(label->pixmap()->size());
scrollArea->ensureVisible(10000, 10000);
scrollArea->show();
如果在setPixmap()
之前调用setWidget()
,则ensureVisible()
将起作用。
而且,即使我调用setWidgetResizable()
甚至setFixedSize()
,问题也可以重现。
为什么会发生这种情况,并且有可能在不更改setWidget()
和setPixmap()
的顺序的情况下确保ensureVisible()
工作吗?
当您调用ensureVisible(10000, 10000);
scrollArea尚未调整小部件的大小。 这就是为什么它不起作用的原因。
如果您创建一个调用ensureVisible
的插槽,并使用QTimer::singleShot
ensureVisible
在超时设置为0的情况下调用该插槽(您也可以使用QMetaObject::invokeMethod
进行排队连接),即使您设置了滚动区域的小部件,它也将起作用在标签上设置像素图之前。
什么也适用,如果你调用ensureVisible
你打电话后show
。 但这仅在您的scrollArea
是顶级窗口时有效。 如果将其嵌入到小部件中,它将无法正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.