1. 工业组态软件主窗口框架搭建

工业组态软件主窗口框架搭建 学习卡片

任务目标

创建一个可运行的Qt Widgets应用程序项目,搭建工业组态软件的基础窗口框架:包含主窗口、菜单栏、工具栏、状态栏以及一个可扩展的中央画布区域,为后续添加工业图形元件与交互功能奠定工程结构基础。

环境依赖

  • Qt 5.15+ 或 Qt 6.x(含Qt Widgets模块)
  • 编译器:MSVC 2019+ / MinGW / GCC(任一支持C++17的编译器)
  • 构建工具:qmake 或 CMake(本案例使用qmake)

工程结构

IndustrialHMI/
├── IndustrialHMI.pro
├── main.cpp
├── mainwindow.h
├── mainwindow.cpp
└── mainwindow.ui(可选,本案例纯代码实现)

完整实现代码

IndustrialHMI.pro

QT += core gui widgets
TARGET = IndustrialHMI
TEMPLATE = app
CONFIG += c++17
SOURCES += main.cpp mainwindow.cpp
HEADERS += mainwindow.h

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

class QAction;
class QLabel;
class QMdiArea;

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);

private slots:
    void newProject();
    void openProject();
    void saveProject();
    void about();

private:
    void createActions();
    void createMenus();
    void createToolBars();
    void createStatusBar();
    void createCentralArea();

    QMdiArea *mdiArea;
    QLabel *statusLabel;
    QAction *newAct;
    QAction *openAct;
    QAction *saveAct;
    QAction *exitAct;
    QAction *aboutAct;
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include <QMenuBar>
#include <QToolBar>
#include <QStatusBar>
#include <QLabel>
#include <QMdiArea>
#include <QMdiSubWindow>
#include <QTextEdit>
#include <QMessageBox>
#include <QApplication>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent), mdiArea(nullptr), statusLabel(nullptr)
{
    setWindowTitle("工业组态设计器 - 未命名项目");
    resize(1280, 800);

    createCentralArea();
    createActions();
    createMenus();
    createToolBars();
    createStatusBar();

    statusLabel->setText("就绪");
}

void MainWindow::createCentralArea()
{
    mdiArea = new QMdiArea(this);
    mdiArea->setBackground(Qt::darkGray);
    setCentralWidget(mdiArea);
}

void MainWindow::createActions()
{
    newAct = new QAction("新建项目", this);
    newAct->setShortcut(QKeySequence::New);
    connect(newAct, &QAction::triggered, this, &MainWindow::newProject);

    openAct = new QAction("打开项目", this);
    openAct->setShortcut(QKeySequence::Open);
    connect(openAct, &QAction::triggered, this, &MainWindow::openProject);

    saveAct = new QAction("保存项目", this);
    saveAct->setShortcut(QKeySequence::Save);
    connect(saveAct, &QAction::triggered, this, &MainWindow::saveProject);

    exitAct = new QAction("退出", this);
    exitAct->setShortcut(QKeySequence::Quit);
    connect(exitAct, &QAction::triggered, this, &QWidget::close);

    aboutAct = new QAction("关于", this);
    connect(aboutAct, &QAction::triggered, this, &MainWindow::about);
}

void MainWindow::createMenus()
{
    QMenu *fileMenu = menuBar()->addMenu("文件(&F)");
    fileMenu->addAction(newAct);
    fileMenu->addAction(openAct);
    fileMenu->addAction(saveAct);
    fileMenu->addSeparator();
    fileMenu->addAction(exitAct);

    QMenu *helpMenu = menuBar()->addMenu("帮助(&H)");
    helpMenu->addAction(aboutAct);
}

void MainWindow::createToolBars()
{
    QToolBar *fileToolBar = addToolBar("文件");
    fileToolBar->addAction(newAct);
    fileToolBar->addAction(openAct);
    fileToolBar->addAction(saveAct);
}

void MainWindow::createStatusBar()
{
    statusLabel = new QLabel(this);
    statusBar()->addWidget(statusLabel);
    statusBar()->showMessage("就绪", 3000);
}

void MainWindow::newProject()
{
    QMdiSubWindow *subWindow = new QMdiSubWindow;
    QTextEdit *editor = new QTextEdit;
    editor->setPlainText("// 新的组态画布\n// 在此添加工业图形元件");
    subWindow->setWidget(editor);
    subWindow->setWindowTitle("组态画面1");
    mdiArea->addSubWindow(subWindow);
    subWindow->show();
    statusLabel->setText("已创建新组态画面");
}

void MainWindow::openProject()
{
    statusLabel->setText("打开项目:功能预留(后续接入文件对话框)");
}

void MainWindow::saveProject()
{
    statusLabel->setText("保存项目:功能预留(后续接入文件写入)");
}

void MainWindow::about()
{
    QMessageBox::about(this, "关于", "Qt工业组态开发实战\n案例1:创建第一个Qt工业组态项目");
}

main.cpp

#include <QApplication>
#include "mainwindow.h"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    MainWindow w;
    w.show();
    return app.exec();
}

运行与验证

构建与运行:

cd IndustrialHMI
qmake
make        # Windows下使用 mingw32-make 或 nmake
./IndustrialHMI   # Windows下运行 IndustrialHMI.exe

验证步骤与通过条件:

  1. 程序启动后显示主窗口,标题为“工业组态设计器 - 未命名项目”,窗口大小约1280×800。
  2. 菜单栏包含“文件”和“帮助”两个菜单;工具栏包含新建、打开、保存三个按钮;状态栏显示“就绪”文字。
  3. 点击“文件→新建项目”或工具栏“新建项目”按钮,中央区域出现一个子窗口,标题为“组态画面1”,内部包含文本“// 新的组态画布”。
  4. 点击“帮助→关于”弹出关于对话框,点击“退出”或关闭窗口可正常结束程序。
  5. 状态栏在每次操作后显示对应的提示文字(如“已创建新组态画面”)。

以上条件全部满足,即表示第一个Qt工业组态项目框架创建成功,可作为后续添加工业图形元件、属性编辑、工程文件读写等功能的基础工程。