[gelöst]ensureVisible() in QScrollArea.Problem mit Scrolling
Verfasst: 7. Oktober 2006 00:34
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:
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:
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]
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
}
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);
...
}
Leider funktioniert dies recht unzuverlässig, manchmal geht der Fokus aus dem Viewport, ohne dass ein Scrollvorgang erfolgt
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]