在为QScrollArea获得帮助之后,我遇到了另一个与the previous one类似的问题。
现在的问题是,如果您创建一个滚动区域和一个标签,将标签设置为滚动区域的小部件,然后在ensureVisible() setWidget()之后将图像加载到标签-中,那么它就什么也不做了。
这个例子说明了这个问题,只需将/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(),这个问题也是可以复制的。
为什么会发生这种情况,并且是否有可能使ensureVisible()工作而不改变setWidget()和setPixmap()的顺序?
发布于 2014-03-26 13:15:38
当您调用ensureVisible(10000, 10000);时,scrollArea还没有调整小部件的大小。这就是为什么它行不通的原因。
如果您创建一个调用ensureVisible的插槽,并使用QTimer::singleShot调用超时设置为0的时隙(您也可以在排队连接中使用QMetaObject::invokeMethod ),那么即使在设置标签上的像素映射之前设置滚动区域的小部件,它也会工作。
同样有效的是,如果在调用ensureVisible之后调用show。但是,只有当您的scrollArea是顶级窗口时,这才有效。如果将其嵌入到小部件中,它将无法工作。
https://stackoverflow.com/questions/22657386
复制相似问题