Hallo werte Netzgemeinschaft!
Hab ein Problem und zwar:
Ich erstelle eine Klasse DisplayWidget die von QWidget abgeleitet ist und in ein QMdiSubWindow gesetzt wird.
Diese Klasse soll QImages darstellen, wobei wenn die Grösse von DisplayWidget geändert wird, sollte Aspect Ratio von DisplayWidget/QMdiSubWindow beibehaltet werden, was zur Zeit nicht der Fall ist.
Hier ist mein Quellcode:
QSizePolicy sizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
for (int i=numWindows-1; i>=0; i--)
{
subWindow[i] = new QMdiSubWindow;
displayWidget[i] = new DisplayWidget();
subWindow[i]->setWidget(displayWidget[i]);
subWindow[i]->setAttribute(Qt::WA_DeleteOnClose);
sizePolicy.setHeightForWidth(subWindow[i]->sizePolicy().hasHeightForWidth()); //hab hier auch mal vergeblich mit sizePolicy.setHeightForWidth(true); versucht
subWindow[i]->setSizePolicy(sizePolicy);
mdiArea->addSubWindow(subWindow[i]);
}
Wie soll ich hier vorgehen?
[gelöst] Aspect Ratio und QSizePolicy
-
soundoflife
- Beiträge: 3
- Registriert: 3. Dezember 2009 17:06
[gelöst] Aspect Ratio und QSizePolicy
Zuletzt geändert von soundoflife am 4. Dezember 2009 16:28, insgesamt 1-mal geändert.
-
soundoflife
- Beiträge: 3
- Registriert: 3. Dezember 2009 17:06
Ok! Man könnte vielleicht das Problem auf ein QWidget reduzieren (vielleicht auch alleine deswegen nicht weil QMdiSubwindow einige Steuerungen von QWidget übernimmt), so dass die Frage wäre, wie kann man ein QWidget dazu zwingen, immer die Höhe nur in Abhängigkeit von Breite (oder umgekehrt) zu verändern?
-
soundoflife
- Beiträge: 3
- Registriert: 3. Dezember 2009 17:06
Ich hab's
Und zwar sollte man die resizeEvent Methode von QMdiSubWindow überschreiben: also obige Klasse ableiten und obige Methode neu implementieren.
void MdiDisplaySubWindow::resizeEvent(QResizeEvent *e)
{
int xSizeInPixel = e->size().width();
int ySizeInPixel = e->size().height();
int min = xSizeInPixel < ySizeInPixel ? xSizeInPixel : ySizeInPixel;
resize(min, min);
QMdiSubWindow::resizeEvent(e);
}
Und zwar sollte man die resizeEvent Methode von QMdiSubWindow überschreiben: also obige Klasse ableiten und obige Methode neu implementieren.
void MdiDisplaySubWindow::resizeEvent(QResizeEvent *e)
{
int xSizeInPixel = e->size().width();
int ySizeInPixel = e->size().height();
int min = xSizeInPixel < ySizeInPixel ? xSizeInPixel : ySizeInPixel;
resize(min, min);
QMdiSubWindow::resizeEvent(e);
}