【QT】自动化设备控制界面搭建

这里根据需求,设计一个自动化设备控制的项目框架:

  1. 主窗体框架包括侧边栏、顶部信息条等内容
  2. 副窗体框架使用模块化封装成dll动态库,动态调用在主窗体的右侧大部分区域显示。

1. 项目搭建

这里我们使用Qt的子项目功能来创建,按照思路,先创建主项目,然后依次添加子项目,这里暂时先使用2个dll动态库加载方案来搭建框架

1.1 创建主项目(容器项目)

创建主项目的时候,我们可以使用"新建项目"中的 Non-Qt Project来创建,然后把main.c文件删掉就好了。

只保留一个.pro文件即可,内容按如下编辑(SUBDIRS后的子项目是在创建子项目时自动生成)。

shell 复制代码
TEMPLATE = subdirs
SUBDIRS = \
		ui-project \
    dll-project \
    dll2-project 
    

创建子项目之后,都可以移除原来自动生成的.h和.cpp文件,然后根据自己需要自行添加即可。

最后,完整的项目结构如下,就可以形成一个主项目包含多个子项目的Qt项目了。

1.2 创建UI项目(应用程序)

shell 复制代码
# ui-project/ui-project.pro
QT += widgets core

TEMPLATE = app
CONFIG += c++11

# 输出配置
TARGET = DllCaller
DESTDIR = $$PWD/../bin

SOURCES += \
    mainwindow.cpp \
    main.cpp

HEADERS += \
    mainwindow.h

# 编译配置
CONFIG += debug_and_release
CONFIG(debug, debug|release) {
    TARGET = $$join(TARGET,,,d)
    DESTDIR = $$PWD/../bin/debug
} else {
    DESTDIR = $$PWD/../bin/release
}

# Windows平台特定配置
win32 {
    # 使用QMAKE_POST_LINK确保在链接完成后执行
    QMAKE_POST_LINK = $$shell_path($$[QT_INSTALL_BINS]/windeployqt.exe) \
                      --qmldir $$shell_path($$PWD) \
                      $$shell_path($$DESTDIR/$$TARGET$$escape_expand(.exe))
}

# 链接库配置
unix {
    LIBS += -ldl
}

win32 {
    LIBS += -luser32
}

1.3 链接DLL项目

shell 复制代码
# dll-project/dll-project.pro
QT += widgets core

TEMPLATE = lib
CONFIG += c++11

DEFINES += WINDOWDLL_LIB

# 输出配置
TARGET = WindowDll
DESTDIR = $$PWD/../bin

# 源文件
SOURCES += \
    WindowDll.cpp
HEADERS += \
    WindowDll.h

# 编译配置
CONFIG += debug_and_release
CONFIG(debug, debug|release) {
    TARGET = $$join(TARGET,,,)
    DESTDIR = $$PWD/../bin/debug
} else {
    DESTDIR = $$PWD/../bin/release
}

# 确保导出符号
win32 {
    QMAKE_LFLAGS += -shared
}

1.4 链接DLL2项目

shell 复制代码
# dll2-project/dll2-project.pro
QT += widgets core

TEMPLATE = lib
CONFIG += c++11

DEFINES += WINDOWDLL_LIB

# 输出配置
TARGET = WindowDllTwo
DESTDIR = $$PWD/../bin

# 源文件
SOURCES += \
    WindowDll2.cpp
HEADERS += \
    WindowDll2.h

# 编译配置
CONFIG += debug_and_release
CONFIG(debug, debug|release) {
    TARGET = $$join(TARGET,,,)
    DESTDIR = $$PWD/../bin/debug
} else {
    DESTDIR = $$PWD/../bin/release
}

# 确保导出符号
win32 {
    QMAKE_LFLAGS += -shared
}

2 功能开发

这部分代码量比较多,可以通过AI协助完成。注意多dll动态库调用的切换问题,加强安全机制,放置内存溢出等问题出现。这里展示部分代码段,后面看实现效果

2.1 ui-project

mainwindow.h

mainwindow.cpp

2.2 dll-project

WindowDll.h

Windowdll.cpp

3 展示效果

主页框架

dll调用

相关推荐
xyq20248 小时前
Go 错误处理
开发语言
JAVA面经实录9178 小时前
企业级java+LangChain4j-RAG系统 限流熔断降级
java·开发语言·分布式·langchain
Slow菜鸟9 小时前
Codex CLI 教程(五)| AI 驱动项目从零到一:面向 Java 全栈工程师打造个人 ECC(V2版)
java·开发语言·人工智能
lsx2024069 小时前
Julia 基本运算符
开发语言
李日灐9 小时前
< 6 > Linux 自动化构建工具:makefile 详解 + 进度条实战小项目
linux·运维·服务器·后端·自动化·进度条·makefile
2501_921649499 小时前
企业定制金融数据 API:从架构设计到 Python 接入实战
大数据·开发语言·python·websocket·金融·量化
直奔標竿9 小时前
SpringAI + RAG + MCP + Agent 零基础全栈实战(完结篇)| 27课完整汇总,Java开发者AI转型必看
java·开发语言·人工智能·spring boot·后端·spring
JZC_xiaozhong9 小时前
跨系统审批自动化怎么做?从采购到销售合同的完整方案
大数据·运维·自动化·流程自动化·数据集成与应用集成·业务流程管理·异构数据集成
reasonsummer10 小时前
【教学类-160-13】20260422 AI视频培训-练习013“豆包AI视频《师幼互动》+豆包图片风格:CG动画”
开发语言·python
曹牧10 小时前
Java:处理 HTTP 请求的 Content-Type
java·开发语言