Qt:在添加小部件后执行动作(滚动)

时间:2012-04-13 12:55:14

标签: qt user-interface

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

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

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

...

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

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

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

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

1 个答案:

答案 0 :(得分:0)

addWidget可能会在重新输入事件循环后调度窗口小部件的实际添加,因此您应该这样做并异步调用scrollToEnd方法(它必须是一个插槽):

layout->addWidget(widget);
QTimer::singleShot(0, this, SLOT(scrollToEnd()));