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