Seite 1 von 1

Während der Laufzeit das Widget austauschen ---[ gelöst ]

Verfasst: 28. Februar 2007 14:41
von Hulk2442
Hi
Wie kann ich währen der Laufzeit das Komplette angezeigte QWidget gegen ein anderes austauschen?
Denn mit folgendem Code will es nicht Funktionieren!

TIA !

Code: Alles auswählen

#include <QApplication>
#include <QThread>
#include <QWidget>
#include <QLabel>
#include <QVBoxLayout>
#include <QTimer>
#include <QLayout>

QWidget *widget()
{
	QWidget *widget = new QWidget();	
	widget->setMinimumSize(140, 140);
	
	QLabel *label = new QLabel();
	QVBoxLayout *VLayout = new QVBoxLayout;

	label->setText("Dies ist ein Text in einem Label !!!");
	
	VLayout->addWidget( label );
	widget->setLayout( VLayout );
	return widget;
}


QWidget *widget2()
{
	QWidget *widget = new QWidget();	
	widget->setMinimumSize(140, 140);
	
	QLabel *label = new QLabel();
	QVBoxLayout *VLayout = new QVBoxLayout;

	label->setText("2. Versuch!!!");
	
	VLayout->addWidget( label );
	widget->setLayout( VLayout );
	return widget;
}


int main(int argc, char *argv[])
{
	QApplication app(argc, argv);

	QWidget *MainWidget = new QWidget();
	MainWidget->setMinimumSize(640, 480);

	//1
	QVBoxLayout *VBLayout = new QVBoxLayout();
	VBLayout->addWidget( widget() );
	MainWidget->setLayout( VBLayout );
	
	MainWidget->show();
	
	//2
	QVBoxLayout *VBLayout2 = new QVBoxLayout();	
	VBLayout2->addWidget( widget2() );
	MainWidget->setLayout( VBLayout2 );
	//MainWidget->repaint();
	//MainWidget->update();
	//MainWidget->show();
	
	return app.exec();
}

Verfasst: 28. Februar 2007 19:55
von upsala
Du sucht ein QStackedWidget als Hilfsklasse...

Verfasst: 1. März 2007 08:54
von Hulk2442
THX für die Hilfe !!!!!
Hat funktioniert!
Hier der soweit geänderte funktionsfähiege Code

Code: Alles auswählen

#include <QApplication>
#include <QThread>
#include <QWidget>
#include <QLabel>
#include <QVBoxLayout>
#include <QTimer>
#include <QLayout>
#include <QBasicTimer>
#include <QStackedWidget>


QWidget *widget()
{
	QWidget *widget = new QWidget();	
	widget->setMinimumSize(140, 140);
	
	QLabel *label = new QLabel();
	QVBoxLayout *VLayout = new QVBoxLayout;
	VLayout->setSpacing(0);
	VLayout->setMargin(0);

	//Design
	QPalette Pal;
	Pal.setColor(QPalette::Window, Qt::darkBlue);
	label->setPalette(Pal);
	label->setTextFormat(Qt::RichText);
	label->setAutoFillBackground(true);
	label->setAlignment(Qt::AlignCenter);
	label->setText("Dies ist ein Text in einem Label !!!");
	
	VLayout->addWidget( label );
	widget->setLayout( VLayout );
	return widget;
}


QWidget *widget2()
{
	QWidget *widget = new QWidget();	
	widget->setMinimumSize(640, 480);
	
	QLabel *label = new QLabel();
	QVBoxLayout *VLayout = new QVBoxLayout;
	VLayout->setSpacing(0);
	VLayout->setMargin(0);

	//Design
	QPalette Pal;
	Pal.setColor(QPalette::Window, Qt::darkRed);
	label->setPalette(Pal);
	label->setTextFormat(Qt::RichText);
	label->setAutoFillBackground(true);
	label->setAlignment(Qt::AlignCenter);
	label->setText("2. Versuch!!!");
	
	VLayout->addWidget( label );
	widget->setLayout( VLayout );
	
	return widget;
}


int main(int argc, char *argv[])
{
	QApplication app(argc, argv);

	QWidget *MainWidget = new QWidget();
	QVBoxLayout *VBLayout = new QVBoxLayout();
	VBLayout->setSpacing(0);
	VBLayout->setMargin(0);
	
	//1
	QWidget *FirstWidget = widget();
	QStackedWidget *stackedWidget = new QStackedWidget;
	stackedWidget->addWidget(FirstWidget);
	VBLayout->addWidget(stackedWidget);
	MainWidget->setLayout(VBLayout);
	
	MainWidget->show();

	//2
	stackedWidget->removeWidget(FirstWidget);
	delete FirstWidget;
	FirstWidget = widget2();
	stackedWidget->addWidget(FirstWidget);
	stackedWidget->setCurrentWidget(FirstWidget);
	
	return app.exec();
}

Verfasst: 1. März 2007 12:27
von upsala
Du kannst auch zwischen den Widgets umschalten, ohne sie immer zu löschen...