[gelöst] Aspect Ratio und QSizePolicy

Alles rund um die Programmierung mit Qt
Antworten
soundoflife
Beiträge: 3
Registriert: 3. Dezember 2009 17:06

[gelöst] Aspect Ratio und QSizePolicy

Beitrag von soundoflife »

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?
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

Beitrag von soundoflife »

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

Beitrag von soundoflife »

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);
}
Antworten