2012-04-13 73 views
0

我有一個水平滾動區域並在其中動態添加小部件。Qt:添加小部件後執行動作(滾動)

我希望它滾動到最後,只要添加一個新的小工具,讓用戶使用這種方法看到的最後一個部件:

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

... 

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

然而,有叫layout->addWidget()和實際部件之間的延遲出現。所以打電話scrollToEnd()什麼都不做。

如果我通過,例如,顯示一個MessageBox,使一切順利,一切工作正常。

有沒有辦法等到窗口小部件顯示,然後滾動滾動區域?

+2

有是QWidget中的showEvent(QShowEvent * event)方法,這可能會幫助您 – Kunal 2012-04-13 13:25:15

+0

感謝您的提示。但奇怪的是還有一個延遲... – Alex 2012-04-13 15:04:51

+0

你說你正在使用一個水平滾動區域。它是一個QScrollArea嗎? – 2012-04-13 16:35:44

回答

0

addWidget大概的時間表widget的實際除事件循環的重新進入後,所以你應該做同樣的和異步調用scrollToEnd方法(它必須是一個插槽):

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

不幸的是,也沒有幫助... – Alex 2012-04-13 15:49:44