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 に答える