0

我有一个水平滚动区域并在其中动态添加小部件。

我希望它在添加新小部件时滚动到最后,以便用户使用此方法看到最后一个小部件:

void scrollToEnd()
{
    scroll->horizontalScrollBar()->setValue(100000);
}

...

layout->addWidget(widget);
scrollToEnd();

layout->addWidget()但是,调用和实际小部件出现之间存在延迟。所以调用scrollToEnd()什么都不做。

例如,如果我通过显示 MessageBox 来暂停一下,一切正常。

有没有办法等到显示小部件,然后滚动滚动区域?

4

1 回答 1

0

addWidget可能会在重新进入事件循环之后安排实际添加小部件,所以你应该做同样的事情并scrollToEnd异步调用方法(它必须是一个插槽):

layout->addWidget(widget);
QTimer::singleShot(0, this, SLOT(scrollToEnd()));
于 2012-04-13T15:26:55.680 回答