| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275 |
- #include "mainwindow.h"
- #include <QToolBar>
- #include <QAction>
- #include <QStackedWidget>
- #include <QHBoxLayout>
- #include <QStatusBar>
- #include <QLabel>
- #include <QSettings>
- #include <QMenuBar>
- #include <QMenu>
- #include <QShortcut>
- #include <QMessageBox>
- MainWindow::MainWindow(QWidget *parent)
- : QMainWindow(parent)
- {
- createUI();
- }
- void MainWindow::createUI()
- {
- // 创建菜单栏
- createMenuBar();
- // 创建主布局
- QWidget *centralWidget = new QWidget(this);
- QVBoxLayout *mainLayout = new QVBoxLayout(centralWidget);
- // 界面设置
- setWindowTitle("软件总线");
- setWindowIcon(QIcon(":/qrc/icons/ads_icon.svg"));
- setUnifiedTitleAndToolBarOnMac(true);
- setDockNestingEnabled(true);
- setAnimated(true);
- setTabPosition(Qt::AllDockWidgetAreas, QTabWidget::North);
- setDockOptions(QMainWindow::AllowTabbedDocks | QMainWindow::AnimatedDocks | QMainWindow::VerticalTabs);
- setStatusBar(new QStatusBar(this));
- setCorner(Qt::TopLeftCorner, Qt::LeftDockWidgetArea);
- setCorner(Qt::TopRightCorner, Qt::RightDockWidgetArea);
- setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea);
- setCorner(Qt::BottomRightCorner, Qt::RightDockWidgetArea);
- setMinimumSize(800, 600);
- setMaximumSize(1600, 1200);
- // 创建页面堆栈
- m_pageStack = new QStackedWidget(this);
- mainLayout->addWidget(m_pageStack);
- centralWidget->setLayout(mainLayout);
- setCentralWidget(centralWidget);
- // 创建工具栏和页面
- createHomeToolbar();
- createSerialToolbar();
- createSettingsToolbar();
- createHelpToolbar();
- // 默认显示主界面
- switchToPage(1);
- // 设置快捷键
- setupShortcuts();
- // 链接信号槽
- connectSignals();
- // 创建状态栏
- this->statusBar()->showMessage("就绪");
- }
- void MainWindow::createMenuBar()
- {
- // 创建菜单栏
- QMenuBar *menuBar = new QMenuBar(this);
- setMenuBar(menuBar);
- // 文件菜单
- QMenu *fileMenu = menuBar->addMenu("文件");
- QAction *newAction = fileMenu->addAction(QIcon(":/qrc/icons/new.png"), "新建");
- QAction *openAction = fileMenu->addAction(QIcon(":/qrc/icons/open.png"), "打开");
- QAction *saveAction = fileMenu->addAction(QIcon(":/qrc/icons/save.png"), "保存");
- fileMenu->addSeparator();
- QAction *exitAction = fileMenu->addAction(QIcon(":/qrc/icons/exit.png"), "退出");
- // 编辑菜单
- QMenu *editMenu = menuBar->addMenu("编辑");
- QAction *undoAction = editMenu->addAction(QIcon(":/qrc/icons/undo.png"), "撤销");
- QAction *redoAction = editMenu->addAction(QIcon(":/qrc/icons/redo.png"), "重做");
- editMenu->addSeparator();
- QAction *cutAction = editMenu->addAction(QIcon(":/qrc/icons/cut.png"), "剪切");
- QAction *copyAction = editMenu->addAction(QIcon(":/qrc/icons/copy.png"), "复制");
- QAction *pasteAction = editMenu->addAction(QIcon(":/qrc/icons/paste.png"), "粘贴");
- // 视图菜单
- QMenu *viewMenu = menuBar->addMenu("视图");
- QAction *homeAction = viewMenu->addAction(QIcon(":/qrc/icons/home.png"), "主界面");
- QAction *serialAction = viewMenu->addAction(QIcon(":/qrc/icons/serial.png"), "串口");
- QAction *settingsAction = viewMenu->addAction(QIcon(":/qrc/icons/settings.png"), "设置");
- QAction *helpAction = viewMenu->addAction(QIcon(":/qrc/icons/help.png"), "帮助");
- // 连接视图菜单的切换功能
- connect(homeAction, &QAction::triggered, this, [this]()
- { switchToPage(0); });
- connect(serialAction, &QAction::triggered, this, [this]()
- { switchToPage(1); });
- connect(settingsAction, &QAction::triggered, this, [this]()
- { switchToPage(2); });
- connect(helpAction, &QAction::triggered, this, [this]()
- { switchToPage(3); });
- // 帮助菜单
- QMenu *helpMenu = menuBar->addMenu("帮助");
- QAction *helpDocAction = helpMenu->addAction(QIcon(":/qrc/icons/help.png"), "帮助文档");
- QAction *aboutAction = helpMenu->addAction(QIcon(":/qrc/icons/about.png"), "关于");
- QAction *updateAction = helpMenu->addAction(QIcon(":/qrc/icons/update.png"), "检查更新");
- connect(aboutAction, &QAction::triggered, this, &MainWindow::showAbout);
- }
- void MainWindow::createHomeToolbar()
- {
- // 创建主界面工具栏
- Toolbar *homeToolbar = new Toolbar("主工具栏", this);
- addToolBar(Qt::TopToolBarArea, homeToolbar);
- homeToolbar->hide();
- // 添加按钮
- homeToolbar->addAction(QIcon(":/qrc/icons/new.png"), "新建");
- homeToolbar->addAction(QIcon(":/qrc/icons/open.png"), "打开");
- homeToolbar->addAction(QIcon(":/qrc/icons/save.png"), "保存");
- homeToolbar->addAction(QIcon(":/qrc/icons/print.png"), "打印");
- // 创建主界面页面
- QLabel *homePage = new QLabel("<center><h1>主界面</h1></center>", this);
- homePage->setAlignment(Qt::AlignCenter);
- // 添加到堆栈
- m_toolbars.append(homeToolbar);
- m_pageStack->addWidget(homePage);
- }
- // 串口界面
- void MainWindow::createSerialToolbar()
- {
- // 创建串口界面工具栏
- Toolbar *serialToolbar = new Toolbar("主工具栏", this);
- addToolBar(Qt::TopToolBarArea, serialToolbar);
- serialToolbar->hide();
- // 添加按钮
- serialToolbar->addAction(QIcon(":/qrc/icons/new.png"), "新建");
- serialToolbar->addAction(QIcon(":/qrc/icons/open.png"), "打开");
- serialToolbar->addAction(QIcon(":/qrc/icons/save.png"), "保存");
- serialToolbar->addAction(QIcon(":/qrc/icons/print.png"), "打印");
- // 创建串口界面页面
- QWidget *serialPage = new QWidget(this);
- QVBoxLayout *serialLayout = new QVBoxLayout(serialPage);
- // 创建 ViewSerial,不把 serialPage 当 parent(更安全)
- m_viewSerial = new ViewSerial(nullptr);
- // 将 m_viewSerial 添加到 serialPage 的布局中(关键)
- serialLayout->addWidget(m_viewSerial);
- // 添加到堆栈
- m_toolbars.append(serialToolbar);
- m_pageStack->addWidget(serialPage);
- }
- void MainWindow::createSettingsToolbar()
- {
- // 创建设置界面工具栏
- Toolbar *settingsToolbar = new Toolbar("设置工具栏", this);
- addToolBar(Qt::TopToolBarArea, settingsToolbar);
- settingsToolbar->hide();
- // 添加按钮
- settingsToolbar->addAction(QIcon(":/qrc/icons/preferences.png"), "首选项");
- settingsToolbar->addAction(QIcon(":/qrc/icons/theme.png"), "主题");
- settingsToolbar->addAction(QIcon(":/qrc/icons/keyboard.png"), "快捷键");
- settingsToolbar->addAction(QIcon(":/qrc/icons/plugins.png"), "插件");
- // 创建设置界面页面
- QLabel *settingsPage = new QLabel("<center><h1>设置界面</h1></center>", this);
- settingsPage->setAlignment(Qt::AlignCenter);
- // 添加到堆栈
- m_toolbars.append(settingsToolbar);
- m_pageStack->addWidget(settingsPage);
- }
- void MainWindow::createHelpToolbar()
- {
- // 创建帮助界面工具栏
- Toolbar *helpToolbar = new Toolbar("帮助工具栏", this);
- addToolBar(Qt::TopToolBarArea, helpToolbar);
- helpToolbar->hide();
- // 添加按钮
- helpToolbar->addAction(QIcon(":/qrc/icons/help.png"), "帮助文档");
- helpToolbar->addAction(QIcon(":/qrc/icons/about.png"), "关于");
- helpToolbar->addAction(QIcon(":/qrc/icons/update.png"), "检查更新");
- // 创建帮助界面页面
- QLabel *helpPage = new QLabel("<center><h1>帮助界面</h1></center>", this);
- helpPage->setAlignment(Qt::AlignCenter);
- // 添加到堆栈
- m_toolbars.append(helpToolbar);
- m_pageStack->addWidget(helpPage);
- }
- /*
- function: 返回指定索引的页面
- @author: flower
- @date: 2025-10-23
- @param index 页面索引
- @return 无
- */
- void MainWindow::switchToPage(int index)
- {
- // 隐藏所有工具栏
- for (Toolbar *toolbar : m_toolbars)
- {
- toolbar->hide();
- }
- // 显示当前工具栏
- if (index >= 0 && index < m_toolbars.size())
- {
- m_toolbars[index]->show();
- m_pageStack->setCurrentIndex(index);
- }
- }
- /*
- function: 设置快捷键
- @author: flower
- @date: 2025-10-23
- @param
- @return 无
- */
- void MainWindow::setupShortcuts()
- {
- // 创建快捷键
- QShortcut *homeShortcut = new QShortcut(QKeySequence("Ctrl+1"), this);
- QShortcut *serialShortcut = new QShortcut(QKeySequence("Ctrl+2"), this);
- QShortcut *settingsShortcut = new QShortcut(QKeySequence("Ctrl+3"), this);
- QShortcut *helpShortcut = new QShortcut(QKeySequence("Ctrl+4"), this);
- // 连接快捷键信号
- connect(homeShortcut, &QShortcut::activated, this, [this]()
- { switchToPage(0); });
- connect(serialShortcut, &QShortcut::activated, this, [this]()
- { switchToPage(1); });
- connect(settingsShortcut, &QShortcut::activated, this, [this]()
- { switchToPage(2); });
- connect(helpShortcut, &QShortcut::activated, this, [this]()
- { switchToPage(3); });
- }
- /*
- function: 链接信号槽
- @author: flower
- @date: 2021-10-23
- @param
- @return 无
- */
- void MainWindow::connectSignals()
- {
- // 连接信号槽
- }
- void MainWindow::showAbout()
- {
- QMessageBox::about(this, "关于",
- "<h2>基于DoDAF的多源数据融合系统总线</h2>"
- "<p> </p>"
- "<p>版本: 1.0.0</p>"
- "<p>© flower </p>");
- }
|