[Qt4] Skalierung und Verteilung von Elementen

Alles rund um die Programmierung mit Qt
Antworten
heikob
Beiträge: 81
Registriert: 23. März 2005 23:20

[Qt4] Skalierung und Verteilung von Elementen

Beitrag von heikob »

Hallo,

ich schreibe gerade an einem kleinen Diashow-Programm und habe noch ein ppar Problemchen mit dem Layout. Einen Screenshot zur besseren Verdeutlichung habe ich euch beigefugt.

Die zweite Button-Leiste besteht aus einem StackedWidget. Dieser wird folgendermaßen erstellt:

Code: Alles auswählen

QStackedWidget *stackedWidget = new QStackedWidget(centralWidget);
stackedWidget->setCurrentIndex(1);

//First Widget Stack
QWidget *FirstWidgetStack = new QWidget();
QWidget *WidgetLayoutSecondLevel = new QWidget(FirstWidgetStack);

QHBoxLayout *LayoutFirstWidgetStack = new QHBoxLayout(WidgetLayoutSecondLevel);

QPushButton *ButtonSecondLevel[LabelSecondLevelDirectorys[0].size()]; for (int i = 0; i < LabelSecondLevelDirectorys[0].size(); ++i)
{
        ButtonSecondLevel[i] = new QPushButton(LabelSecondLevelDirectorys[0].at(i),WidgetLayoutSecondLevel);
        LayoutFirstWidgetStack->addWidget(ButtonSecondLevel[i]);
}
stackedWidget->addWidget(FirstWidgetStack);
Das funktioniert auch ohne Probleme, nur würde ich die Buttons gerne, wie bei einem normalen Layout üblich, über die gesamte Breite verteilen. Auch die Verwendung von Spacern bringt hier keine Änderung. Vermutlich muss ich die Breite des Stacks an die Fensterbreite anpassen. Nur leider habe ich im Moment keine Ahnung, wie ich das tun soll. Vielleicht hat hier jemand von euch einen Tipp.

Viel wichtiger ist aber der Bereich mit dem Foto. Wie ihr seht, wird das Foto total verzerrt dargestellt. Es wird in der Höhe einfach nicht mitskaliert.

Code: Alles auswählen

QLabel *pictureWidget = new QLabel();
pictureWidget->setScaledContents(TRUE);

QSize stack = pictureWidget->size();
QString test = SecondLevelDirectorys[0][0]+"/"+Pictures[0];
QImage image(test);
	image=image.scaled(stack,Qt::KeepAspectRatio,Qt::SmoothTransformation);
pictureWidget->setPixmap(QPixmap::fromImage(image));
Hier habe ich leider gar keine Idee, wie ich eine vernünftige Skalierung des Bildes erreichen kann. Gibt es eine Möglichkeit, den maximal verfügbaren Platz für das Element im zentralen QVBoxLayout zu ermitteln? Damit könnte man dann die maximale Größe des Bildes ermitteln und es entsprechend skalieren. Allerdings habe ich noch keine Möglichkeit gefunden, dies zu ermitteln.

Vielen Dank für eure Hilfe
Heiko
Dateianhänge
screen_01.jpg
screen_01.jpg (94.11 KiB) 3085 mal betrachtet
paulchen
Beiträge: 8
Registriert: 14. Februar 2005 17:14
Wohnort: München

Beitrag von paulchen »

In Deiner Beschreibung fehlt mir ein Layout für das gesamte Fenster, dem Du dann das "QHBoxLayout *LayoutFirstWidgetStack" zuordnest. Wahrscheinlich wäre das ein QVBoxlayout.

Ich habe bei einem meiner Programme auf eine zile wie
pictureWidget->setScaledContents(TRUE);
verzichtet. Statt dessen hilft hier ein "pictureWidget->adjustSize()" viel besser.

Möglicherweise fehlen Dir dann noch ein paar Kleinigkeiten in den Layouts,
ein "addStretch()" am rechten Ort wirkt Wunder.

HTH
paulchen
heikob
Beiträge: 81
Registriert: 23. März 2005 23:20

Beitrag von heikob »

Leider bin ich erst heute wieder dazu gekommen, mich mit dem Problem zu beschäftigen. Leider haben mir deine Hinweise nicht sonderlich geholfen.

Ich stehe immer noch vor dem Problem, den zur Verfügung stehende Platz für das Bild zu ermitteln um damit die nötige Skalierung für das Bild zu errechnen. Das muss doch möglich sein, ohne eine feste Größe vorzugeben.

Es würde ja reichen, wenn ich das QLabel, welches ich in das QVBoxLayout lege im darauf mein Bild anzuzeigen, auf die maximal zur Verfügung stehende Größe vergrößern könnte. Daraus könnte ich dann die Größe ermitteln und mein Bild entsprechend anpassen. Nur leider gelingt mir das nicht. :(

Hat hier vielleicht noch jemand einen Tipp, wie ich das ermitteln bzw. erreicfhen kann? Auch ganz andere Ideen zur Lösung des Problems sind willkommen.
paulchen
Beiträge: 8
Registriert: 14. Februar 2005 17:14
Wohnort: München

Beitrag von paulchen »

Du kannst doch die Größe des Widgets, das Dein Bildwidget enthält ( und dem das richtige Layout fehlt ) leicht ermitteln: siehe QWidget::size().

Das ist allerdings etwas tricky, die Funktion liefert erst dann einen brauchbaren Wert, wenn das Widget tatsächlich auf dem Bildschirm zu sehen ist. D.h. alle Größenberechnungen müssen außerhalb des Konstruktors ausgeführt werden.

HTH
paulchen
Antworten