我想在QWidgets中切換。在下面的代碼中,我希望sceneWidget
顯示view1
或view2
,具體取決於按下哪個按鈕。切換QWidgets
但代碼很難做到這一點。哪裏不對? (除了非常難看的全局變量,這是我留給下一個步驟。)
#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();
}
QTabWidget和QStackedWidget之間通常比較使我不知道當一個不具有上限爲製表符或堆疊的數量是否任一適合。您是否知道QStackedWidget是否適用於小部件編號爲數百或數千的? – Calaf
與標籤小部件相比,堆疊小部件明顯可以更好地縮放到多個小部件。試試看,它應該工作。 – milianw