[solved] QGraphicsView: scene() an Fenster anpassen
Verfasst: 21. Januar 2008 20:35
Hallo Leute,
Ich habe ein kleines Problem. Ich möchte meinem GraphicsView ein FitWidth/FitHeight/FitPage verpassen. Letzteres funktioniert prächtig, bei den beiden anderen habe ich noch Probleme. Es werden wie wild neue resizeEvents abgefeuert, wenn das Größenverhältnis der Seiten ScrollBars erfordert.
Auf Folgendes konnte ich mich in meinem resizeEvent einigen:
An den vielen viewRect sieht man meine gescheiterten Versuche. nur die letzte (gerade auskommentierte) Zeile klappt, allerdings hab ich dann immer Scrollbars, was ich ja genau nicht will.
Den Zähler hab ich eingebaut um zu sehen was da so abgeht, innerhalb 3-4 Sekunden (ohne Fenstergröße verändern!) bin ich auf über 1000 Events!
Mein paintEvent schaut dann so aus:
Wobei updateZoom() folgendes macht:
Kann mir jemand sagen wo mein Fehler liegt? Es hilft übrigens auch nix wenn ich das QGraphicsView::resizeEvent(e) einfüge, auch am Anfang von resizeEvent...
Bin grad relativ am Ende mit meinem Latein.
Es wäre sehr nett wenn mir jemand von euch weiterhelfen könnte...
Besten Dank
Franz
Ich habe ein kleines Problem. Ich möchte meinem GraphicsView ein FitWidth/FitHeight/FitPage verpassen. Letzteres funktioniert prächtig, bei den beiden anderen habe ich noch Probleme. Es werden wie wild neue resizeEvents abgefeuert, wenn das Größenverhältnis der Seiten ScrollBars erfordert.
Auf Folgendes konnte ich mich in meinem resizeEvent einigen:
Code: Alles auswählen
void
View::resizeEvent(QResizeEvent* e)
{
static int i = 0;
i++;
qDebug() << "resizeEvent() triggered: " << i;
int margin = 2;
//QRect viewRect = QRect(QPoint(0, 0), e->size()).adjusted(margin, margin, -margin, -margin);
//QRect viewRect = viewport()->rect().adjusted(margin, margin, -margin, -margin);
//QRect viewRect = viewport()->rect();
QRect viewRect = QRect(QPoint(0,0), e->size());
//QRect viewRect = rect();
if( _resizeMode == Chart::FitWidth ) {
_zoom = viewRect.width()/scene()->width();
} else if( _resizeMode == Chart::FitHeight ) {
_zoom = viewRect.height()/scene()->height();
}
//QGraphicsView::resizeEvent(e);
}Den Zähler hab ich eingebaut um zu sehen was da so abgeht, innerhalb 3-4 Sekunden (ohne Fenstergröße verändern!) bin ich auf über 1000 Events!
Mein paintEvent schaut dann so aus:
Code: Alles auswählen
void
View::paintEvent(QPaintEvent* e)
{
QGraphicsView::paintEvent(e);
if( _resizeMode == Chart::FitPage ) {
fitInView( scene()->sceneRect(), Qt::KeepAspectRatio );
} else {
updateZoom();
}
}Code: Alles auswählen
void
View::updateZoom()
{
QMatrix matrix;
matrix.scale(_zoom, _zoom);
setMatrix(matrix);
}Bin grad relativ am Ende mit meinem Latein.
Es wäre sehr nett wenn mir jemand von euch weiterhelfen könnte...
Besten Dank
Franz