繁体   English   中英

QScrollArea :: ensureVisible()和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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM