2

2列あります。列の1つはたくさんのQWidgetsで埋められています。ウィジェットを列にドロップすると、次のメソッドが呼び出されます。

void MainWindow::scrollToItem(Product_View *item) {
    QPoint point = item->mapToParent(QPoint());
    ui->scrollArea->ensureVisible(point.x(), point.y());
}

最初の列の一番下にいて、次の列にウィジェットをドラッグしたとき。スクロールエリアは下に適切にスクロールするので、ドロップした場所を確認できます。

しかし、ウィジェットを最初の列に戻すと、スクロールしますが、完全に一番下まではスクロールしません。その約150px(編集:150pxは真実ではありません。ウィジェットの約5pxしか表示されません)

誰か助けてもらえますか?

編集:

私のレイアウトを知っておくといいかもしれません。

が付いたメインウィンドウがありQScrollAreaます。scrollAreaにはがQWidget呼び出されscrollAreaWidgetContents、QHBoxLayoutがあります。ウィジェットには5つの列があります。そして、これらにはドラッグアンドドロップウィジェット用のQVBoxLayoutがあります。

JEEZ別の編集:

私はそれが最後のアイテムでのみうまくいかないことに気づきます。

私はただ編集を続けます

スクロールバーが完全に下がっていないことは、今では明らかです。

QScrollBar *bar = ui->scrollArea->verticalScrollBar();
bar->setValue(bar->maximum());

このコードも同じ動作を示しています。このスレッドをどうすればよいですか?そして、私は新しいものを作成する必要がありますか?

4

3 に答える 3

1

ensureVisible関数はポイントしか取得しないため、これを使用しても、ウィジェットの 1 つのコーナーが表示されることが保証されるだけです (左上だと思いますか?)。代わりにensureWidgetVisibleを使用してみてください。これにより、ウィジェット全体が画面上に表示されるようになります。

それが役立つことを願っています!

于 2013-01-12T11:54:24.903 に答える
1

問題が見つかりました。解決策ではありません。

ウィジェットをドラッグして最初の列に戻すと、私のコードは を呼び出しますensureWidgetVisible。その後、新しいアイテムのために scrollArea のサイズが変更されます。それが私のウィジェットが完全に見えない理由です。

于 2013-01-12T12:45:21.920 に答える