gpt4 book ai didi

c++ - QScrollArea::ensureVisible() 和 QScrollArea::setWidget()

转载 作者:太空宇宙 更新时间:2023-11-04 11:37:20 27 4
gpt4 key购买 nike

在获得有关 the previous one 的帮助后,我遇到了 QScrollArea 的另一个问题, 这有点相似。

现在的问题是,如果您创建一个滚动区域和一个标签,将标签设置为滚动区域的小部件,然后将图像加载到标签中,ensureVisible() 什么都不做 - < strong>在 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(),问题仍可重现。

为什么会发生这种情况,是否可以在不更改 setWidget()setPixmap() 顺序的情况下使 ensureVisible() 工作>?

最佳答案

当您调用 ensureVisible(10000, 10000); 时,scrollArea 尚未调整小部件的大小。这就是它不起作用的原因。

如果您创建一个调用 ensureVisible 的插槽并使用 QTimer::singleShot 调用该插槽并将超时设置为 0(您也可以使用 QMetaObject::invokeMethod with queued connection),它会工作,即使你在标签上设置像素图之前设置了滚动区域的小部件。

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

关于c++ - QScrollArea::ensureVisible() 和 QScrollArea::setWidget(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22657386/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com