【发布时间】:2016-01-16 03:46:16
【问题描述】:
我想在 QWidgets 之间切换。在下面的代码中,我希望 sceneWidget 显示 view1 或 view2,具体取决于按下的按钮。
但代码几乎没有这样做。怎么了? (除了非常丑陋的全局变量,我留待下一步。)
#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();
}
【问题讨论】: