我有一个水平滚动区域,并在其中动态添加小部件。
每当添加新窗口小部件时,我希望它滚动到最后,以便用户使用此方法查看最后一个窗口小部件:
void scrollToEnd()
{
scroll->horizontalScrollBar()->setValue(100000);
}
...
layout->addWidget(widget);
scrollToEnd();
然而,在调用layout->addWidget()
和实际小部件出现之间存在延迟。所以调用scrollToEnd()
什么都不做。
如果我通过显示MessageBox来暂停,一切正常。
有没有办法等到窗口小部件显示,然后滚动滚动区域?
答案 0 :(得分:0)
addWidget
可能会在重新输入事件循环后调度窗口小部件的实际添加,因此您应该这样做并异步调用scrollToEnd
方法(它必须是一个插槽):
layout->addWidget(widget);
QTimer::singleShot(0, this, SLOT(scrollToEnd()));