afsim-2.9.0升级Qt5.15.2
环境Windows 11CMake 4.0.0Visual Studio 2022Qt5.15.2源码目录结构|- afsim-2.9.0-win64|- |- demos|- |- documentation|- |- resources|- |- swdev|- |- |- build-qt|- |- |- dependencies|- |- |- src|- |- |- |- CMakeLists.txt…参考文章AFSIM入门教程03.01Windows下编译AFSIM入门教程索引一、afsim-2.9.0升级Qt5.15.2全部替换qt-5.12.11 为 qt-5.15.2从tools\3rd_party-cmake\qt-5.12.11.cmake 复制tools\3rd_party-cmake\qt-5.15.2.cmake修改tools\3rd_party-cmake\qt-5.15.2.cmakeswdev\src\CMakeLists.txt 添加# 设置Qt根目录 - 这将覆盖swdev_acquire_packages自动设置的值 set(qt_ROOT_DIR D:/Qt/5.15.2/msvc2019_64 CACHE PATH Path to Qt installation FORCE) message(STATUS Qt根目录已设置为: ${qt_ROOT_DIR})或者直接在CMAKEGUI中添加swdev\src\tools\3rd_party-cmake\config.cmakeif (usingPackage) set(${pkgBaseName}_ROOT_DIR ${SWDEV_THIRD_PARTY_ROOT}/${pkgname}) include(${CURRENT_LIST_DIR}/${pkg}.cmake) if (${EXE_TARGET_DIRECTORY} STREQUAL ) set_property(GLOBAL APPEND PROPERTY SWDEV_ALL_PACKAGES_USED ${pkgBaseName}) else() set_property(DIRECTORY ${EXE_TARGET_DIRECTORY} APPEND PROPERTY SWDEV_ALL_PACKAGES_USED ${pkgBaseName}) endif() endif()修改为if (usingPackage) # 只有在${pkgBaseName}_ROOT_DIR未设置时才设置它这样可以允许用户在外部覆盖 if(NOT DEFINED ${pkgBaseName}_ROOT_DIR) set(${pkgBaseName}_ROOT_DIR ${SWDEV_THIRD_PARTY_ROOT}/${pkgname}) message(STATUS 自动设置${pkgBaseName}_ROOT_DIR为: ${${pkgBaseName}_ROOT_DIR}) else() message(STATUS 使用用户指定的${pkgBaseName}_ROOT_DIR: ${${pkgBaseName}_ROOT_DIR}) endif() include(${CURRENT_LIST_DIR}/${pkg}.cmake) if (${EXE_TARGET_DIRECTORY} STREQUAL ) set_property(GLOBAL APPEND PROPERTY SWDEV_ALL_PACKAGES_USED ${pkgBaseName}) else() set_property(DIRECTORY ${EXE_TARGET_DIRECTORY} APPEND PROPERTY SWDEV_ALL_PACKAGES_USED ${pkgBaseName}) endif() else() message(STATUS 文件: ${CMAKE_CURRENT_LIST_FILE} 行: ${CMAKE_CURRENT_LIST_LINE} ${pkgBaseName}_ROOT_DIR:usingPackage ${usingPackage}) # 只有在${pkgBaseName}_ROOT_DIR未设置时才设置它这样可以允许用户在外部覆盖 if(NOT DEFINED ${pkgBaseName}_ROOT_DIR) message(WARNING 文件: ${CMAKE_CURRENT_LIST_FILE} 行: ${CMAKE_CURRENT_LIST_LINE} ${pkgBaseName}_ROOT_DIR没有找到${${pkgBaseName}_ROOT_DIR}) else() message(STATUS 使用用户指定的${pkgBaseName}_ROOT_DIR: ${${pkgBaseName}_ROOT_DIR}) include(${CURRENT_LIST_DIR}/${pkg}.cmake) endif() endif()CMAKE中确保QT路径如果使用Release则不用添加BUILD_TYPE、CMAKE_BUILD_TYPE 使用RelWithDebInfo如下CMAKE_BUILD_TYPEswdev\src\wsf_plugins\wsf_oms_uci\source\CMakeLists.txt添加$$CONFIG:RelWithDebInfo:${REL_DLLS}# 2. 修改add_custom_command复制对应配置的DLL到目标目录 add_custom_command(TARGET ${PROJECT_NAME} COMMAND ${CMAKE_COMMAND} -E copy $$CONFIG:Debug:${DBG_DLLS} $$CONFIG:Release:${REL_DLLS} $$CONFIG:RelWithDebInfo:${REL_DLLS} $TARGET_FILE_DIR:${PROJECT_NAME})swdev\src\tools\utilqt\source\UtQtPieChart.cpp包含头文件#include QPainterPathswdev\src\tools\wkf\core\source\WkfViewer.cpp包含头文件#include QKeyEventswdev\src\tools\wkf\common\source\selectors\WkfImageSelectorWidget.cpp包含头文件#include QDragEnterEvent#include QDropEventswdev\src\core\wsf\source\WsfThreadPool.hpp包含头文件#include chronoswdev\src\tools\wkf\plugins\TerrainTools\source\LOS_Ruler.cpp包含头文件#include QPainterPathswdev\src\mystic\plugins\ResultInteractionPlots\source\WaterfallPlot.cpp包含头文件#include QWheelEventswdev\src\warlock\warlock_core\source\WkScriptTypes.hpp包含头文件#include QString#include QDataStreamswdev\src\wizard\lib\source\core\Environment.hpp包含头文件#include QFocusEventswdev\src\warlock\plugins\TrackDetailsDisplay\source\TrackDetailsDisplayDialog.cpp包含头文件#include QKeyEventswdev\src\mover_creator\source\ConvertBrawlerAircraftDialog.cpp// TODO:ERROR//geometryObject[0] vehicleMassObject;geometryObjectvehicleMassObject;swdev\src\warlock\plugins\DialogBuilder\source\DialogBuilderMainDialog.cpp包含头文件#include QDragEnterEvent#include QDropEventswdev\src\wizard\plugins\PatternVisualization\source\PatternPolarPlotLayer.cpp包含头文件#include QPainterPathswdev\src\core\sensor_plot_lib\source\HorizontalMapFunction.cpp加上std::swdev\src\mystic\plugins\ResultTimeController\source\RvTimeControllerToolbarWidgets.cpp包含头文件#include QMouseEventswdev\src\wizard\plugins\PatternVisualization\source\PatternPolarPlotLayer.hpp包含头文件#include QPainterPathswdev\src\warlock\plugins\SixDOF_Tuner\source\TunerMainWidget.cpp和swdev\src\mover_creator\source\ScriptGeneratorRigidBodySixDOF.cpp和swdev\src\mover_creator\source\AeroLiquidRocketEngine.cpp和swdev\src\mover_creator\source\AeroJetEngine.cpp和swdev\src\mover_creator\source\AeroRamjetEngine.cpp和swdev\src\mover_creator\source\ScriptGeneratorPointMassSixDOF.cpp和swdev\src\mover_creator\source\AeroSolidRocketEngine.cpp和swdev\src\mover_creator\source\BrawlerConverter.cpp和swdev\src\mover_creator\source\VehicleLandingGear.cpp和swdev\src\mover_creator\source\ScriptGeneratorSixDOF.cpp替换swdev\src\mover_creator\source\SolidRocketEngineWidget.cpp#ifQT_DEPRECATED_SINCE(5,15)connect(mUIPtr-specificationsComboBox,QComboBox::textActivated,this,SolidRocketEngineWidget::HandleSpecificationsComboBoxChanged);connect(mUIPtr-massComboBox,QComboBox::textActivated,this,SolidRocketEngineWidget::HandleMassComboBoxChanged);connect(mUIPtr-altitudeComboBox,QComboBox::textActivated,this,SolidRocketEngineWidget::HandleAltitudeComboBoxChanged);connect(mUIPtr-propellantMassComboBox,QComboBox::textActivated,this,SolidRocketEngineWidget::HandlePropellantMassComboBoxChanged);#elseconnect(mUIPtr-specificationsComboBox,static_castvoid(QComboBox::*)(constQString)(QComboBox::activated),this,SolidRocketEngineWidget::HandleSpecificationsComboBoxChanged);connect(mUIPtr-massComboBox,static_castvoid(QComboBox::*)(constQString)(QComboBox::activated),this,SolidRocketEngineWidget::HandleMassComboBoxChanged);connect(mUIPtr-altitudeComboBox,static_castvoid(QComboBox::*)(constQString)(QComboBox::activated),this,SolidRocketEngineWidget::HandleAltitudeComboBoxChanged);connect(mUIPtr-propellantMassComboBox,static_castvoid(QComboBox::*)(constQString)(QComboBox::activated),this,SolidRocketEngineWidget::HandlePropellantMassComboBoxChanged);#endifswdev\src\mover_creator\source\ControlsWidget.cpp#ifQT_DEPRECATED_SINCE(5,15)connect(mUIPtr-mActivePilotComboBox,QOverloadint::of(QComboBox::currentIndexChanged),[](intindex){this-ControlSystemTypeChanged(mUIPtr-mActivePilotComboBox-itemText(index));});connect(mUIPtr-mControlSystemTypeComboBox,QOverloadint::of(QComboBox::currentIndexChanged),[](intindex){this-ControlSystemTypeChanged(mUIPtr-mControlSystemTypeComboBox-itemText(index));});connect(mUIPtr-mYawControlComboBox,QOverloadint::of(QComboBox::currentIndexChanged),[](intindex){this-ValueChanged();});connect(mUIPtr-mWeaponYawControlComboBox,QOverloadint::of(QComboBox::currentIndexChanged),[](intindex){this-ValueChanged();});connect(mUIPtr-mWeaponRollControlComboBox,QOverloadint::of(QComboBox::currentIndexChanged),[](intindex){this-ValueChanged();});connect(mUIPtr-mRollControlSurfacesComboBox,QOverloadint::of(QComboBox::currentIndexChanged),[](intindex){this-ValueChanged();});connect(mUIPtr-mWeaponRollControlSurfacesComboBox,QOverloadint::of(QComboBox::currentIndexChanged),[](intindex){this-ValueChanged();});#elseconnect(mUIPtr-mActivePilotComboBox,static_castvoid(QComboBox::*)(constQString)(QComboBox::currentIndexChanged),this,ControlsWidget::ValueChanged);connect(mUIPtr-mControlSystemTypeComboBox,static_castvoid(QComboBox::*)(constQString)(QComboBox::currentIndexChanged),this,ControlsWidget::ControlSystemTypeChanged);connect(mUIPtr-mYawControlComboBox,static_castvoid(QComboBox::*)(constQString)(QComboBox::currentIndexChanged),this,ControlsWidget::ValueChanged);connect(mUIPtr-mWeaponYawControlComboBox,static_castvoid(QComboBox::*)(constQString)(QComboBox::currentIndexChanged),this,ControlsWidget::ValueChanged);connect(mUIPtr-mWeaponRollControlComboBox,static_castvoid(QComboBox::*)(constQString)(QComboBox::currentIndexChanged),this,ControlsWidget::ValueChanged);connect(mUIPtr-mRollControlSurfacesComboBox,static_castvoid(QComboBox::*)(constQString)(QComboBox::currentIndexChanged),this,ControlsWidget::ValueChanged);connect(mUIPtr-mWeaponRollControlSurfacesComboBox,static_castvoid(QComboBox::*)(constQString)(QComboBox::currentIndexChanged),this,ControlsWidget::ValueChanged);#endif....#ifQT_DEPRECATED_SINCE(5,15)connect(mUIPtr-mControlSystemTypeComboBox,QOverloadint::of(QComboBox::currentIndexChanged),[](intindex){this-ValueChanged();});connect(mUIPtr-mYawControlMappingComboBox,QOverloadint::of(QComboBox::currentIndexChanged),[](intindex){this-ValueChanged();});connect(mUIPtr-mPitchControlMappingComboBox,QOverloadint::of(QComboBox::currentIndexChanged),[](intindex){this-ValueChanged();});connect(mUIPtr-mRollControlMappingComboBox,QOverloadint::of(QComboBox::currentIndexChanged),[](intindex){this-ValueChanged();});#elseconnect(mUIPtr-mControlSystemTypeComboBox,static_castvoid(QComboBox::*)(constQString)(QComboBox::currentIndexChanged),this,ControlsWidget::ValueChanged);connect(mUIPtr-mYawControlMappingComboBox,static_castvoid(QComboBox::*)(constQString)(QComboBox::currentIndexChanged),this,ControlsWidget::ValueChanged);connect(mUIPtr-mPitchControlMappingComboBox,static_castvoid(QComboBox::*)(constQString)(QComboBox::currentIndexChanged),this,ControlsWidget::ValueChanged);connect(mUIPtr-mRollControlMappingComboBox,static_castvoid(QComboBox::*)(constQString)(QComboBox::currentIndexChanged),this,ControlsWidget::ValueChanged);#endifswdev\src\mover_creator\source\PerformanceWidget.cpp#ifQT_DEPRECATED_SINCE(5,15)curItem-setSelected(true);#elsemUIPtr-performanceTestTreeWidget-setItemSelected(curItem,true);#endif....#ifQT_DEPRECATED_SINCE(5,15)curItem-setSelected(false);#elsemUIPtr-performanceTestTreeWidget-setItemSelected(curItem,false);#endifswdev\src\wizard\plugins\OSMConverter\source\OSMConverterDataContainer.hpp#if!QT_DEPRECATED_SINCE(5,15)namespacestd{templatestructhashQString{std::size_toperator()(constQStringaString)const{returnqHash(aString);}};}// namespace std#endifswdev\src\wizard\lib\source\map\Platform.cpp#if!QT_DEPRECATED_SINCE(5,15)namespacestd{templatestructhashQString{std::size_toperator()(constQStrings)const{returnqHash(s);}};}// namespace std#endifswdev\src\tools\wkf\core\source\WkfEnvironment.hpp/** * brief 获取演示目录路径 * return QString 演示目录路径 * note 演示目录位于源代码根目录的上级目录的demos文件夹 */#if0QStringGetDemosDir()const{returnQString::fromStdString(mSourceRoot)/../demos;}#else//QString GetDemosDir() const { return (mSourceRoot.empty() ? mResourcesDir : QString::fromStdString(mSourceRoot) ) /../demos; }QStringGetDemosDir()const{returnmResourcesDir/../demos;}#endif二、编译CMakeTargets/ALL_BUILDCMakeTargets/INSTALL三、使用swdev\build-qt\wsf_install\bin 拷贝所以到运行目录swdev\build-qt\RelWithDebInfo 或者 swdev\build-qt\Release拷贝资源文件demos、documentation、resources 运行目录的上层swdev\build-qt\设置applications/wizard 设置为启动项目二、编译CMakeTargets/ALL_BUILDCMakeTargets/INSTALL三、使用swdev\build-qt\wsf_install\bin 拷贝所以到运行目录swdev\build-qt\RelWithDebInfo 或者 swdev\build-qt\Release拷贝资源文件demos、documentation、resources 运行目录的上层swdev\build-qt\设置applications/wizard 设置为启动项目

相关新闻

10分钟上手Revo:Todo示例应用带你快速掌握事件驱动开发

10分钟上手Revo:Todo示例应用带你快速掌握事件驱动开发

10分钟上手Revo:Todo示例应用带你快速掌握事件驱动开发 【免费下载链接】Revo Event Sourcing, CQRS and DDD framework for C#/.NET Core. 项目地址: https://gitcode.com/gh_mirrors/revo/Revo Revo是一个基于C#/.NET Core的事件溯源(Event Sou…

2026/10/17 4:07:15 阅读更多 →
macOS用户必看:解决Typstudio首次运行的“开发者无法验证”问题

macOS用户必看:解决Typstudio首次运行的“开发者无法验证”问题

macOS用户必看:解决Typstudio首次运行的“开发者无法验证”问题 【免费下载链接】typstudio A W.I.P desktop application for a new typesetting language, typst. 项目地址: https://gitcode.com/gh_mirrors/ty/typstudio Typstudio是一款针对新型排版语言…

2026/10/17 4:07:25 阅读更多 →
【AI写作故事创作黄金法则】:20年资深内容架构师亲授5大不可逆的叙事引擎模型

【AI写作故事创作黄金法则】:20年资深内容架构师亲授5大不可逆的叙事引擎模型

更多请点击: https://intelliparadigm.com 第一章:AI写作故事创作的底层认知革命 传统故事创作长期依赖人类经验、情感直觉与线性叙事逻辑,而AI写作的兴起并非简单替代作者,而是触发一场关于“创作本体”的范式迁移——从“作者中…

2026/10/17 1:15:36 阅读更多 →

最新新闻

2009数模A题血管应力仿真MATLAB工程复现指南

2009数模A题血管应力仿真MATLAB工程复现指南

简介:本资源为2009年全国大学生数学建模竞赛A题参赛论文及配套源码,面向数学建模初学者、备赛学生与高校指导教师,聚焦实际工程问题的建模求解全流程实践。压缩包共9个文件,含5个txt文本(记录数据处理、评价结果、模型…

2026/10/18 2:15:57 阅读更多 →
SteamOS 与 AMD 显卡性能调优:从 amdgpu 到 DXVK 的完整指南

SteamOS 与 AMD 显卡性能调优:从 amdgpu 到 DXVK 的完整指南

最近不少玩家反馈,SteamOS 在 AMD Radeon 显卡上的表现和 Windows 下完全不同。尤其是一些中低端显卡,明明在 Windows 下跑得有些吃力,到了 SteamOS 游戏模式里反而显得更跟手了。文章标题里的 RX 9060 XT 虽然带有“低配”标签,但…

2026/10/18 2:15:57 阅读更多 →
百亿级流量架构实战:CDN+Nginx+Java微服务分层设计

百亿级流量架构实战:CDN+Nginx+Java微服务分层设计

先说结论:如果你正在为一个日请求量接近百亿的系统做架构改造,那么“CDN Nginx 接入层 Java 微服务”这套组合,是目前最稳、最经得起实战考验的落地路径之一。这个方案的核心思路并不复杂——把流量分层消化掉,让每一层只处理自…

2026/10/18 2:15:57 阅读更多 →
PFC 5.0离散元模拟实战:颗粒流代码与岩土三轴仿真教程

PFC 5.0离散元模拟实战:颗粒流代码与岩土三轴仿真教程

简介:这份PFC5.0软件教程压缩包面向地质力学与岩土工程领域的工程师和科研人员,系统讲解PFC离散元分析软件的核心功能。教程重点覆盖力链玫瑰图绘制、二维渗流模拟等典型应用,同时深入解析DPL编程语言,帮助用户掌握自定义加载步、…

2026/10/18 2:15:57 阅读更多 →
图书管理系统课程设计:软件工程文档与VB6+SQL Server实现解析

图书管理系统课程设计:软件工程文档与VB6+SQL Server实现解析

简介:这份资源是面向软件工程课程设计学习者与高校学生的图书管理系统完整开发文档,围绕需求分析、系统设计、数据库设计与系统实现等核心环节展开,适合正在完成课程设计、撰写实验报告或学习结构化开发流程的读者参考。压缩包内共1个doc文档…

2026/10/18 2:15:57 阅读更多 →
从字节序到内存对齐:数据在内存中的真实布局深度拆解

从字节序到内存对齐:数据在内存中的真实布局深度拆解

每个写过几年代码的人,一定都遇到过一个诡异的问题:某个变量在断点里看着是对的,可一传入函数就变了;浮点数比较怎么都对不上;结构体明明只声明了几个字段,内存占用却比想象中多一截。这些问题绝大多数都能…

2026/10/18 2:14:57 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →