#include "mainwindow.h" #include #include #include #include #include #include #include #include #include #include #include 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("

主界面

", 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("

设置界面

", 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("

帮助界面

", 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, "关于", "

基于DoDAF的多源数据融合系统总线

" "

" "

版本: 1.0.0

" "

© flower

"); }