Seite 1 von 1

[gelöst] Eigener QPaintEvent und Scrollbalken

Verfasst: 30. März 2010 08:32
von thebigear
Hallo,

ich habe ein Widget, in dem ich ein eigenes QPaintEvent definiert habe. Es ist ein ziemlich breites Bild, ähnlich einer Partitur.
Nun habe ich das Problem, dass diese nicht komplett im Widget angezeigt werden kann und ich gerne horizontale Scrollbalken anzeigen lassen will, die auch entsprechend den Sichtbereich verändern. Wie mache ich das?
Mir fällt da zwar als Stichpunkt der viewport ein, aber ich habe keine Ahnung, wie ich das programmieren soll?

Ich hoffe mir kann da jemand helfen. Danke

thebigear

Verfasst: 30. März 2010 10:35
von franzf
Am einfachsten ist es, dass du dein bereits fertiges Widget in eine QScrollArea steckst, die erledigt das mit den Scrollbars für dich.

Verfasst: 30. März 2010 10:40
von thebigear
Das hatte ich versucht, aber leider ist dann mein Widget noch kleiner geworden und hat noch nicht mal die volle Breite des Programmfensters ausgenutzt. Und es wurden auch keine Scrollbalken angezeigt.

Code: Alles auswählen

QScrollArea *scrollArea = new QScrollArea;
QVBoxLayout *scrollLayout = new QVBoxLayout
scrollArea->setLayout(scrollLayout);
scrollArea->setWidget(wgtProcessPainter);
scrollArea->setFixedHeight(200);
scrollArea->setFrameStyle(0);
ui->vLayout_PartiturNotation->addWidget(scrollArea);
wgtProcessPainter -> das ist das Widget in dem ich zeichne (nur das nichts anderes)

Was habe ich hier vergessen?

Verfasst: 30. März 2010 12:49
von franzf
Nimm mal bitte das Layout raus! Das brauchst du nicht...
Ansonsten solltest du mit *sizeHint, *sizePolicy usw. rumspielen. Natürich erst nachdem du dich darüber schlau gelesen hast.

Am besten schaust du auch mal, wie es canorus macht :P
www.canorus.org

Verfasst: 30. März 2010 14:17
von thebigear
Dankle, das wars, habe jetzt nur eine Horizontale scrollbar und keine Vertikale, musste dafür diese aber explizit abschalten:

Code: Alles auswählen

scrollArea->setWidget(wgtProcessPainter);
    scrollArea->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::MinimumExpanding);
    scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    scrollArea->setFixedHeight(200);
    scrollArea->setHorizontalScrollBar(scroll);
    scrollArea->setFrameStyle(0); // no Border
    ui->vLayout_PartiturNotation->addWidget(scrollArea);
Danke für die Hilfe