Je voudrais basculer entre QWidgets. Dans le code ci-dessous, je voudrais sceneWidget
pour afficher soit view1
ou view2
, selon le bouton qui a été enfoncé.Basculer entre QWidgets
Mais le code ne fait guère que. Qu'est-ce qui ne va pas? (Mis à part les variables globales très laid, que je laisse pour une prochaine étape.)
#include <QWidget>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QPushButton>
#include <QApplication>
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QGraphicsEllipseItem>
QGraphicsView* getView(int x, int y, int w, int h)
{
QGraphicsScene* scene = new QGraphicsScene;
scene->addItem(new QGraphicsEllipseItem(x,y,w,h));
QGraphicsView* view = new QGraphicsView(scene);
return view;
}
QVBoxLayout* rightVbox;
QGraphicsView* view1;
QGraphicsView* view2;
void c1() {
rightVbox->insertWidget(0, view1);
}
void c2() {
rightVbox->insertWidget(0, view2);
}
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
view1 = getView(0,0,100,50);
view2 = getView(0,0,50,100);
QWidget* mainWidget = new QWidget;
QHBoxLayout* hbox = new QHBoxLayout(mainWidget);
QWidget* buttonsWidget = new QWidget;
hbox->addWidget(buttonsWidget);
QVBoxLayout* leftVbox = new QVBoxLayout(buttonsWidget);
QPushButton* button1 = new QPushButton("Scene 1", buttonsWidget);
QPushButton* button2 = new QPushButton("Scene 2", buttonsWidget);
leftVbox->addWidget(button1);
leftVbox->addWidget(button2);
QWidget* sceneWidget = new QWidget;
hbox->addWidget(sceneWidget);
rightVbox = new QVBoxLayout(sceneWidget);
rightVbox->insertWidget(0, view1);
QObject::connect(button1, &QPushButton::clicked, c1);
QObject::connect(button2, &QPushButton::clicked, c2);
mainWidget->show();
return app.exec();
}
La comparaison habituelle entre QTabWidget et QStackedWidget me demande si l'un est adapté quand on n'a pas une limite supérieure au nombre d'onglets ou des piles. Savez-vous si QStackedWidget est adapté si le nombre de widgets est de centaines ou de milliers? – Calaf
Un widget empilé définitivement mieux adapté à plusieurs widgets par rapport à un widget onglet. Essayez-le, cela devrait fonctionner. – milianw