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

Alles rund um die Programmierung mit Qt
Antworten
AlGaN
Beiträge: 25
Registriert: 25. März 2006 12:45

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

Beitrag 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]
Zuletzt geändert von AlGaN am 13. Oktober 2006 10:30, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
AlGaN
Beiträge: 25
Registriert: 25. März 2006 12:45

Beitrag 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
Antworten