Seite 1 von 1

QGridLayout + QWidget.hide()

Verfasst: 10. Februar 2007 13:22
von iaby
Hallo zusammen!

Ich bin noch ein blutiger Qt Anfänger, entschuldigt also wenn die Frage total Schwachsinn ist:
Ich habe ein 2x3 QGridLayout das sich über das komplette Fenster erstreckt (Menü und StatusBar sind auch noch da!). Darin ist auf der kompletten linken Seite ein QLabel untergebracht, auf der rechten in den ersten zwei jeweils eine QGroupBox und unten rechts ein Spacer. Es funktioniert soweit alles ganz gut (GroupBoxen haben eine feste Göße), nur wenn ich jetzt die untere GroupBox verstecke über hide(), und dann das Fenster vergrößere, so bleibt die GroupBox nicht mehr an der rechten Seite, sondern es ensteht ein freier Raum zwischen GroupBox und rechtem Fensterrand.
Wenn ich show() machen stimmt es wieder!

Hab ich was falsch gemacht? Sollte ich vielleicht noch etwas Code posten?
Ich benutzte noch Qt 3.3.7!

Danke schonmal!

Gruß,
iaby

Verfasst: 20. Februar 2007 13:43
von iaby
Hier mal der (gekürzte) Code zu meinem Problem:

mainwindow.cpp:

Code: Alles auswählen

#include <qapplication.h>
#include <qlabel.h>
#include <qlayout.h>
#include <qgroupbox.h>
#include <qpushbutton.h>

#include "mainwindow.h"

MainWindow::MainWindow(QWidget* parent, const char* name)
  : QMainWindow(parent, name)
{
	setCentralWidget(new QWidget(this));
	QGridLayout *mainLayout = new QGridLayout(centralWidget(), 1, 1, 11, 6);
	QSpacerItem *spacer = new QSpacerItem(20, 110, QSizePolicy::Minimum, QSizePolicy::Expanding);
	mainLayout->addItem(spacer, 2, 1);

	QLabel *label = new QLabel(centralWidget());
	label->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
	label->setMinimumSize(150, 50);
	label->setText("Dies ist ein Test");
	mainLayout->addMultiCellWidget(label, 0, 2, 0, 0);

	QGroupBox *box1 = new QGroupBox(centralWidget());
	box1->setMinimumSize(140, 150);
	box1->setMaximumSize(140, 150);
	QPushButton *button = new QPushButton(box1);
	button->move(10, 20);
	button->setText("hide!");
	mainLayout->addWidget(box1, 0, 1);

	QGroupBox *box2 = new QGroupBox(centralWidget());
	box2->setMinimumSize(140, 150);
	box2->setMaximumSize(140, 150);
	mainLayout->addWidget(box2, 1, 1);

	connect(button, SIGNAL(clicked()), box2, SLOT(hide()));
}

int main( int argc, char **argv )
{
	QApplication app( argc, argv );
	MainWindow test;
	app.setMainWidget(&test);
	test.show();

	return app.exec();
}
mainwindow.h:

Code: Alles auswählen

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <qmainwindow.h>

class MainWindow : public QMainWindow
{
	Q_OBJECT
public:
    MainWindow(QWidget* parent=0, const char* name=0);
};

#endif

Verfasst: 21. Februar 2007 12:16
von iaby
Für alle die vielleicht das gleiche Problem haben:

Code: Alles auswählen

	mainLayout->setColStretch(0, 1);
hätt ich ja auch früher draufkommen können :?