2010-08-27 9 views
12

Ich habe ein Widget mit QScrollArea drin und ich möchte, dass es nach unten scrollt, nachdem das Widget mit dem es angezeigt wird. Ich habe versucht:Programmgesteuert scrollen QScrollArea

scrollArea->ensureVisible(0,100, 20, 20); 

Es funktioniert nur, wenn vom Benutzer aufgerufen (Taste zum Beispiel drückt). Putting es in widget contstructor oder showEvent funktioniert nicht. Kann es automatisch gemacht werden?

Antwort

19

Ich glaube, Sie können den Inhalt von QScrollArea scrollen, indem Sie Positionen für seine horizontalen und vertikalen Bildlaufleisten festlegen. Smth, wie folgt aus:

scrollArea->verticalScrollBar()->setValue(scrollArea->verticalScrollBar()->value() + 10); 
scrollArea->horizontalScrollBar()->setValue(scrollArea->horizontalScrollBar()->value() + 10); 

Code oben sollte Inhalt der Scroll-Bereich 10 Pixel nach unten und 10 Pixel rechts jedes Mal

hoffe, das hilft bewegen, sieht

Edit0 aufgerufen wird: zusätzlicher Codeausschnitt, der zeigt, wie der Bereich im Konstruktor des Formulars gescrollt wird:

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 

    QLabel *imageLabel = new QLabel; 
    QImage image("my_large_image_file.JPG"); 
    imageLabel->setPixmap(QPixmap::fromImage(image)); 

    ui->scrollArea->setBackgroundRole(QPalette::Dark); 
    ui->scrollArea->setWidget(imageLabel); 

    ui->scrollArea->horizontalScrollBar()->setValue(100); 
    ui->scrollArea->verticalScrollBar()->setValue(100); 
} 
+0

Leider funktioniert es auch nicht, wenn es vom Widget-Konstruktor oder showEvent aufgerufen wird. – majaen

+0

Ich denke, Sie sollten etwas von Ihrem Code, da diese Lösung für mich in meinem Formular-Widget-Konstruktor –

+0

Ok, ich habe den Fehler gefunden. Vor dem Einstellen der Bildlaufleisten gab es eine Größenänderung (maximumSize()), was offensichtlich keine gute Idee ist (aber ich bin mir nicht sicher, warum dies das scrollAreas-Verhalten auf diese Weise beeinflusst hat). – majaen

2

Ich habe sime Zeit mit dem Debug verbracht ger und finde heraus, dass scriollArea 0 Größen im Konstruktor hat, also sieht es so aus, als wäre es möglich, nur etwas zu scrollen, wenn alle Widgets erstellt und sichtbar sind. Scrolling im showEvent von Fenster funktioniert gut.

Verwandte Themen