首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >QScrollArea::()和QScrollArea::setWidget()

QScrollArea::()和QScrollArea::setWidget()
EN

Stack Overflow用户
提问于 2014-03-26 10:01:10
回答 1查看 895关注 0票数 1

在为QScrollArea获得帮助之后,我遇到了另一个与the previous one类似的问题。

现在的问题是,如果您创建一个滚动区域和一个标签,将标签设置为滚动区域的小部件,然后在ensureVisible() setWidget()之后将图像加载到标签-中,那么它就什么也不做了。

这个例子说明了这个问题,只需将/path/to/some/image.png替换为计算机上的一些真实图像:

代码语言:javascript
运行
复制
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(),这个问题也是可以复制的。

为什么会发生这种情况,并且是否有可能使ensureVisible()工作而不改变setWidget()setPixmap()的顺序?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-26 13:15:38

当您调用ensureVisible(10000, 10000);时,scrollArea还没有调整小部件的大小。这就是为什么它行不通的原因。

如果您创建一个调用ensureVisible的插槽,并使用QTimer::singleShot调用超时设置为0的时隙(您也可以在排队连接中使用QMetaObject::invokeMethod ),那么即使在设置标签上的像素映射之前设置滚动区域的小部件,它也会工作。

同样有效的是,如果在调用ensureVisible之后调用show。但是,只有当您的scrollArea是顶级窗口时,这才有效。如果将其嵌入到小部件中,它将无法工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22657386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档