C++Qt不用Qt工程师,用QStackedWidget完整代码实现在主窗口中点击第一个菜单,切换到第一子窗口,点击第二个菜单,切换到第二个子窗口,点击第三个菜单,切换到第三个子窗口,并且保证各个窗口之间不会产生冲突
时间: 2023-06-20 19:06:40 浏览: 100
以下是使用QStackedWidget实现上述功能的完整代码:
```cpp
#include <QtWidgets/QMainWindow>
#include <QtWidgets/QMenu>
#include <QtWidgets/QMenuBar>
#include <QtWidgets/QStackedWidget>
#include <QtWidgets/QWidget>
class MainWindow : public QMainWindow {
public:
MainWindow(QWidget *parent = nullptr) : QMainWindow(parent) {
// 创建菜单栏
QMenu *menu = new QMenu("菜单", this);
menuBar()->addMenu(menu);
// 添加菜单项
QAction *action1 = new QAction("菜单1", this);
QAction *action2 = new QAction("菜单2", this);
QAction *action3 = new QAction("菜单3", this);
menu->addAction(action1);
menu->addAction(action2);
menu->addAction(action3);
// 创建三个子窗口
QWidget *widget1 = new QWidget(this);
QWidget *widget2 = new QWidget(this);
QWidget *widget3 = new QWidget(this);
// 在子窗口中添加一些控件
widget1->setStyleSheet("background-color: red;");
widget2->setStyleSheet("background-color: green;");
widget3->setStyleSheet("background-color: blue;");
// 创建一个QStackedWidget来管理三个子窗口,并将其设置为主窗口的中心窗口
QStackedWidget *stackedWidget = new QStackedWidget(this);
setCentralWidget(stackedWidget);
stackedWidget->addWidget(widget1);
stackedWidget->addWidget(widget2);
stackedWidget->addWidget(widget3);
// 连接菜单项的点击事件,使其在QStackedWidget中切换子窗口
connect(action1, &QAction::triggered, [=]() {
stackedWidget->setCurrentWidget(widget1);
});
connect(action2, &QAction::triggered, [=]() {
stackedWidget->setCurrentWidget(widget2);
});
connect(action3, &QAction::triggered, [=]() {
stackedWidget->setCurrentWidget(widget3);
});
}
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
MainWindow mainWindow;
mainWindow.show();
return app.exec();
}
```
在这个例子中,我们创建了一个QMainWindow,并在其中添加了一个菜单栏和三个菜单项。我们还创建了三个子窗口,每个子窗口都设置了不同的背景颜色。我们使用QStackedWidget来管理这三个子窗口,并将其设置为主窗口的中心窗口。最后,我们将菜单项的点击事件连接到QStackedWidget的setCurrentWidget()槽函数,以便在不同的子窗口之间切换。
阅读全文