2012-04-13 4 views
0

У меня есть горизонтальная область прокрутки и динамически добавленные виджеты внутри нее.Qt: выполнение действия (прокрутка) после добавления виджета

Я хочу, чтобы прокрутить до самого конца, когда добавляется новый виджет, так что пользователь видит последний виджет с помощью этого метода:

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

... 

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

Однако, есть задержка между вызовом layout->addWidget() и фактическим виджетом появляться. Поэтому вызов scrollToEnd() ничего не делает.

Если я делаю apause, например, показывая MessageBox, все работает нормально.

Есть ли способ подождать, пока виджет будет отображаться, а затем прокрутите область прокрутки?

+2

там это событие showEvent (QShowEvent *) в QWidget, это может помочь вам – Kunal

+0

Спасибо за отзыв. Но странно, что все еще есть задержка ... – Alex

+0

Вы говорите, что используете горизонтальную область прокрутки. Это QScrollArea? –

ответ

0

addWidget вероятно графики фактического добавления виджета после повторного входа в цикле обработки событий, так что вы должны сделать то же самое и вызвать метод scrollToEnd асинхронно (он должен быть слот):

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

К сожалению, это не помогло ... – Alex

Смежные вопросы