Alles rund um die Programmierung mit Qt
Hulk2442
Beiträge: 115 Registriert: 10. Januar 2007 13:44
Beitrag
von Hulk2442 » 28. Februar 2007 14:41
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();
}
Zuletzt geändert von
Hulk2442 am 1. März 2007 08:55, insgesamt 1-mal geändert.
upsala
Beiträge: 3946 Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:
Beitrag
von upsala » 28. Februar 2007 19:55
Du sucht ein QStackedWidget als Hilfsklasse...
Hulk2442
Beiträge: 115 Registriert: 10. Januar 2007 13:44
Beitrag
von Hulk2442 » 1. März 2007 08:54
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();
}
upsala
Beiträge: 3946 Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:
Beitrag
von upsala » 1. März 2007 12:27
Du kannst auch zwischen den Widgets umschalten, ohne sie immer zu löschen...