Seite 1 von 1

[gelöst]ensureVisible() in QScrollArea.Problem mit Scrolling

Verfasst: 7. Oktober 2006 00:34
von AlGaN
Hi,

sorry, wenn das Thema schonmal diskutiert worden sein sollte, konnte in der SuFu nix dazu finden...

Ich bin relativer Newbie in Qt 4.x und habe eine Anwendung, die als Haupt-Widget in einem MainWindow (abgeleitet von QMainWindow) eine QScrollArea besitzt. Diese hat als Child Widget ein von QWidget abgeleitetes Widget, der Konstruktor von MainWindow sieht etwa so aus:

Code: Alles auswählen

MainWindow::MainWindow()
{
     scrollArea = new QScrollArea;
     viewer = new QSvgViewer(scrollArea); // set scroll area to parent
     scrollArea->setWidget(viewer);
     ...
     setCentralWidget(scrollArea);
     resize(800,600); // size of MainWindow
     viewer->setFixedSize(600, 4800); // widget has fixed size
     viewer->resize(6000, 4800); // initial size of scroll map widget
}
Wie zu sehen, ist das in der QScrollArea enthaltene Widget viel größer als die ScrollArea selbst, so dass immer automatisch Scrollbars vorhanden sind...

In einer anderen Methode der Klasse MainWindow will ich nun das Widget auf einen bestimmten Punkt zentrieren, so dass dieser Punkt (x,y) in der Mitte des Viewports der ScrollArea ist:

Code: Alles auswählen

void MainWindow::setPos(int x, int y)
{
     ...
     scrollArea->>setFocus(); // has to be called when using ensureVisible() before event loop
     scrollArea->ensureVisible(x, y, scrollArea->width()/2, scrollArea->height()/2);
     ...
}
Durch den Aufruf ensureVisible(x,y, scrollArea->width()/2, scrollArea->height()/2); versuche ich, den Punkt (x,y) des Widgets ins Zentrum des Viewports der ScrollArea zu bringen.
Leider funktioniert dies recht unzuverlässig, manchmal geht der Fokus aus dem Viewport, ohne dass ein Scrollvorgang erfolgt :? , dies passiert sowohl unter Win Qt 4.1.0 als auch unter Linux Qt 4.1.0

Falls jemand zu obigem Problem Tipps & Lösungsvorschläge hat (auch andere Möglichkeiten, das "Fokus"-Problem zu lösen), wäre ich sehr dankbar...

Gruß,
AlGaN
[/code]

Verfasst: 10. Oktober 2006 16:04
von Christian81
Evtl. mal 4.1.4 versuchen? Bzw. kannst du ein kleines Testcase bauen daamit man es reproduzieren und ggf. gegen andere Qt-versionen testen kann? Aber erstmal würde ich 4.1.4 probieren.

Verfasst: 13. Oktober 2006 10:25
von AlGaN
Hi,

danke für Deine Antwort, hab inzwischen die neue Qt-Version 4.2.0 übersetzt und installiert, den Code damit übersetzt: Der Bug tritt nicht mehr auf :) ...
Man sollte wohl immer die neueste Version einsetzen...

Sorry, hab im Augenblick gerade keine Zeit, um einen Testcase zu erstellen, ist wohl auch nicht mehr notwendig, da es sich wohl um einen Qt-Bug gehandelt hat.

Trotzdem Danke & Gruß
AlGaN