- 博客(257)
- 资源 (7)
- 收藏
- 关注

原创 Plant Simulation 基于Windows消息系统跨线程通讯方案
方案2:如果实在不想浪费开辟共享内存的开销使用也可以使用SendMessage方式 但是需要将消息Append到目标句柄 hmodule 的后方,PlantSimulation.dll 在解析完自己需要的参数后,会自动将指针后移到用户实际数据部分。推荐使用 安徽锐锋科技 提供的重构的参数接口。
2025-05-10 15:29:42
303

原创 TPS使用底层(C++)ODBC完成数据库的增删改查-1
在上面的连接字符串中,您需要将server_name替换为实际的服务器名称,database_name替换为实际的数据库名称,username替换为实际的用户名,password替换为实际的密码。要在SQLDriverConnect中自动链接而不弹出对话框,您需要提供连接字符串中的所有必需参数。请注意,上述示例代码中的henv是先前分配的环境句柄。您还需要根据您使用的数据库驱动程序进行适当的更改。“SQLCHAR *” 类型的实参与 “SQLWCHAR *” 类型的形参不兼容。
2023-07-27 12:53:02
286
1

原创 SQLite FTS5 扩展
FTS5 是一个 SQLite 虚拟表模块,为数据库应用程序提供全文搜索功能。在最基本的形式中, 全文搜索引擎允许用户有效地搜索大型 包含一个或多个 搜索词。谷歌提供给万维网用户的搜索功能是全文搜索。引擎,因为它允许用户搜索网络上包含的所有文档, 例如,术语“FTS5”。要使用 FTS5,用户需要创建一个包含一个或多个 FTS5 虚拟表 列。例如:将类型、约束或主键声明添加到 用于创建 FTS5 表的创建虚拟表语句。
2023-05-17 17:05:07
2337

原创 PlantSimulation属性操作全家桶
PlantSimulation属性操作<Path>.getAttributeName(Position:integer) → string<Path>.getAttributeValue(Parameter:any) → string<Path>.getAttrName(AttributeNumber:integer) → string<Path>.getAttrNo(AttributeName:string) → integer<Pa
2022-04-26 09:09:38
1136

原创 关于PlantSimulation 3D界面灰黑色解决方案
关于PlantSimulation 3D界面灰黑色解决方案不知道大家有没有遇到过PlantSimulation 3D模式下黑屏问题,现象如下图:发生这个问题主要是因为我们选择了不合适的OpenGL 版本导致的:设置方法如下:如下图 需要选择自己合适的OpenGL版本即可,我的笔记本是3060 但是选择超过4.1版本后就会出现不同层次的黑屏现象。虽然版本越高 功能和性能越高,但是匹配才是最重要的。各版本OpenGL说明:详细信息可查看下面链接:https://www.cnblogs.com
2021-10-23 14:31:19
2610
2

原创 PlantSimulation预定义异常处理及捕获
函数 setErrorHandler 将您作为数据类型对象参数输入的 Method 设置为全局错误处理方法。当 SimTalk 方法中出现运行时错误时,它会禁止打开调试器。这个全局错误处理方法只会在程序没有找到单独的异常处理方法时才会执行当您设置全局错误处理方法时,当 SimTalk 方法中发生运行时错误时,将调用此方法。传递给该方法的三个参数:•带有错误消息的字符串。您必须将字符串参数声明为按引用参数。• 带有错误方法路径的字符串。• 一个整数值,表明哪一行包含错误。函数setErrorHan
2021-09-27 15:37:40
967

原创 PlantSimulation中4中移动对象的方法对比
insert 移动对象句法.insert([Target:any, Position:length, ConveyingDirection:integer]) → boolean方法 insert 将 指定的 MU 完全放置到参数 any 指定的目标对象上。• 对于面向点的对象,行为与move 和transfer 方法相同。• 对于面向长度的对象,MU 也会移动到指定的目标对象上,前提是它提供了足够的空间。如果指定的目标对象没有提供足够的空间,Plant Simulation 会尝试将 MU 的
2021-07-17 11:24:17
2204
3
原创 QMultiMap&QHash&QList使用区别
摘要:本文对比了QList、QMap、QMultiMap和QHash在管理UI窗口时的使用差异。QList简单但查找性能差(O(n));QMap/QHash查找快(O(log n)/O(1))但不支持重复标题;QMultiMap支持重复标题且查找较快(O(log n))。建议:少量窗口用QList,标题唯一且需高性能用QHash,同名窗口管理用QMultiMap。选择取决于标题重复性和性能需求。(150字)
2025-06-11 18:17:30
235
原创 vs2022中detach qt widgets designer
在Visual Studio 2022中禁用Qt Widgets Designer的几种方法:1) 在Qt VS Tools选项中取消启用Designer集成;2) 将.ui文件的默认打开方式改为XML编辑器;3) 通过VS Installer卸载Qt Designer组件;4) 临时禁用Qt Visual Studio Tools扩展。这些方法可根据需要选择使用,禁用后仍可通过编辑XML文件修改界面。
2025-06-10 17:16:50
250
原创 人员管理2302版本
本文介绍了三种人员管理方案:全自动、半自动和全人工管理。全自动方案未提供具体代码,但预计通过自动化系统实现人员调度。半自动方案通过代码实现,使用broker对象获取服务提供者,并通过条件判断和broker的engage方法进行任务分配。全人工方案则通过代码手动管理人员,禁用自动调度功能,并手动指派人员到指定工作地点。三种方案分别适用于不同自动化需求的管理场景,全自动方案适合高度自动化环境,半自动方案结合了自动化和人工干预,而全人工方案则完全依赖手动操作。
2025-05-19 18:29:54
49
原创 自定义库模块增加自定义许可操作详细方法
本文介绍了在自定义库模块中增加自定义许可操作的详细方法,主要涉及两个关键函数:setRequiredLicense 和 checkForLicense。setRequiredLicense 用于设置库加载时的密钥检查,确保密钥正确、版本匹配且未过期,否则无法加载。该函数支持设置许可证功能名称、版本号、密码等参数,并可添加自定义提示信息。checkForLicense 用于检查密钥的有效性,支持初始化时调用,并返回不同错误代码以提示具体问题,如未注册的许可证、主机ID错误、许可证过期等。通过这两个函数,可以有
2025-05-17 11:42:13
1095
1
原创 PlantSimulation 隐藏 Frame节点(Structure)的操作方法
在PlantSimulation中隐藏Frame节点(Structure)的操作方法如下:首先,确保封装的Frame已开启LockStructure功能。其次,Frame必须放置在库中,并且该库需要设置密码进行加密(密码不能为空)。通过这些步骤,可以实现Frame节点的隐藏。此外,若需隐藏文件夹,只需在文件夹属性中激活“HiddenWhenInLockedFolder”选项即可。这些操作有助于在PlantSimulation中管理和保护模型结构。
2025-05-14 16:13:41
52
原创 使用定时器监视当前PID 如果当前程序关闭 UI_Core.exe 也随之自动关闭实现方法
C++20 QT6.9 VS2022 中使用QProcess::startDetached(“UI_Core.exe”, QStringList(), QString(), &UI_Manage_pid);是启动目标程序 能否同时告诉目标程序当前宿主程序的PID,在UI_CORE.EXE中 使用定时器监视当前PID 如果当前程序关闭 UI_Core.exe 也随之自动关闭 如何实现。这样,UI_Core.exe 就能在宿主进程意外退出或被正常关闭时,自己检测到并自动退出,保证不会在后台孤儿运行。
2025-05-10 17:00:30
467
原创 针对共享内存和上述windows消息机制 在C++ 和qt之间的案例 进行详细举例说明
在此示例中,写入端将 QImage 序列化并写入共享内存,读取端从共享内存中读取并反序列化为 QImage。在此示例中,发送端使用 PostMessage 向目标窗口发送自定义消息,接收端在窗口过程函数中处理该消息。以下是关于在 C++ 和 Qt 中使用共享内存(QSharedMemory)和 Windows 消息机制(SendMessage / PostMessage)进行跨线程或跨进程通信的详细示例。线程间通信:对于线程间通信,Qt 提供了信号与槽机制,通常比共享内存或消息机制更为安全和高效。
2025-05-08 18:31:32
280
原创 跨线程和跨进程通信还有多种方式对比
进程间通信:可以考虑命名管道、共享内存、消息队列、Socket、COM/DCOM 等方式,选择应基于数据量、实时性和平台兼容性等因素。请根据您的具体应用需求、平台和性能要求选择合适的通信机制。线程间通信:推荐使用 PostMessage、事件、互斥锁、信号量等机制,具体选择取决于同步需求和性能要求。分布式系统:消息中间件(如 RabbitMQ、Kafka)适用于大规模分布式系统中的异步通信和消息传递。跨平台通信:推荐使用 Socket、ZeroMQ、gRPC 等方式,具有良好的跨平台支持和扩展性。
2025-05-08 18:13:01
255
原创 函数申明 Q_INVOKABLE
Q_INVOKABLE 是 Qt 提供的一个宏,主要用于 使成员函数能够被 Qt 的元对象系统(Meta-Object System)识别和调用。Q_INVOKABLE 是让一个普通成员函数进入 Qt 的“反射系统”,你可以通过字符串名字动态调用它,它在跨线程、QML 调用、脚本式引擎中非常有用。Q_INVOKABLE 只是告诉 Qt 元对象系统:“我想让这个函数能被反射式调用”。能够被 Qt QML 引擎识别(如果你在用 QML);可以跨线程使用信号/槽机制以外的方式调用。
2025-05-07 18:10:20
335
原创 Qt 中信号与槽(signal-slot)机制支持 多种连接方式(ConnectionType)
Qt 中信号与槽(signal-slot)机制支持 多种连接方式(ConnectionType),用于控制信号发出后如何调用槽函数,特别是在 跨线程 情况下。行为:不是独立的调用方式,而是一个 标志位,可与其他连接类型组合使用(例如 Qt::QueuedConnection | Qt::UniqueConnection)。行为:异步调用,即信号发出时不会立即执行槽函数,而是将槽函数调用封装成事件,放入接收者线程的事件队列中。槽函数在接收者线程中执行,但 发出信号的线程会阻塞,直到槽函数执行完毕。
2025-05-07 18:02:32
672
原创 详细讲解 QMutex 线程锁和 QMutexLocker 自动锁的区别
QMutex 是线程同步的低层工具,QMutexLocker 是安全易用的高级封装,两者结合使用,可以轻松保障多线程 Qt 应用的线程安全。如果中间代码 throw 出异常,或者你忘记调用 unlock(),程序就会死锁(锁永远不释放)。QMutexLocker 是 Qt 提供的一个RAII(资源自动管理)类,用于自动加锁和解锁。QMutex 是 Qt 中的互斥锁(mutex)类,用于防止多个线程同时访问共享资源。避免手动管理锁,保证锁一定会释放(即使中途抛异常)。✍️ 示例场景:线程安全的缓存操作。
2025-04-24 20:34:11
365
原创 New and Changed SimTalk Features 2504
【代码】New and Changed SimTalk Features 2504。
2025-04-24 15:16:04
521
原创 Plant Simulation 2504正式增加Omniverse支持
近期采购Plant Simulation 的企业推荐采购 2504版本,可以支持Omniverse。
2025-04-24 15:12:56
239
原创 关于Tecnomatix Plant Simulation 3D模型保存过慢的问题解决方案
自 2302版本之后,Tecnomatix Plant Simulation 支持保持为psfm格式文件,使用该格式保持后 仿真模型后续保存采用增量保持的方式,可以大量压缩保存浪费的时间。
2025-04-24 15:09:42
299
原创 数据库中对增改删没有及时submit的 取消其控制权限
此方案通过自动回收权限而非直接终止会话,既解决了资源占用问题,又避免了数据不一致风险。实现自动取消未及时提交的DML操作控制权限。方案2:使用SQL Agent作业定期检查。审计跟踪:所有自动权限变更必须详细记录。通知机制:权限回收时应通知用户和管理员。测试环境验证:在生产环境实施前充分测试。方案1:使用DDL触发器与权限回收。性能影响:频繁权限变更可能影响性能。白名单:排除关键服务账户。方案3:应用程序层控制。
2025-04-08 12:32:56
430
原创 配置SSMS 让数据库中会话时长大于30秒的自动终止
在SQL Server Management Studio (SSMS)中,没有内置的直接设置可以自动终止长时间运行的会话。打开SSMS → SQL Server Agent → 作业 → 新建作业。方法3:使用资源调控器(SQL Server Enterprise版)方法1:使用SQL Server Agent作业定期检查并终止。方法4:使用扩展事件(XEvents)监控并触发操作。添加步骤,类型选择"Transact-SQL脚本"配置SSMS自动终止长时间运行的会话(>30秒)
2025-04-08 12:30:45
297
原创 数字化计算机语言特性对比
GUI 流畅度:Qt 6.9(硬件加速)> C# (WPF) > MFC > Java (JavaFX) > Python (PyQt/Tkinter)GUI 开发便捷度:C# (WPF) ≈ Qt (QML) > Python (PyQt) > Java (JavaFX) > MFC。最佳跨平台:Qt 6.9 > Java ≈ Python > C# > MFC(仅 Windows)最高性能:MFC ≈ Qt 6.9(C++)> C# > Java > Python。
2025-03-31 13:24:06
211
原创 MATLAB 编写的函数或算法生成可供 C++ 调用的库或组件
配置编译器: 在 MATLAB 命令窗口中,输入 mex -setup,选择适用于您 MATLAB 版本的支持的 C++ 编译器。添加生成的库和头文件: 将 MATLAB 生成的库文件(如 .lib、.dll)和头文件(.h)添加到您的 VS2022 项目中。包含头文件路径: 右键点击项目,选择“属性”,在“C/C++”的“常规”部分,将生成的头文件所在的文件夹添加到“附加包含目录”。准备 MATLAB 代码: 确保您的 MATLAB 函数符合代码生成的要求,避免使用不支持的函数或特性。
2025-03-26 16:50:52
886
原创 C++代码优化算法的效率详细对比
在 C++20 编译器中,除了 -O2 优化选项外,还有其他优化级别可供选择,包括 -O0、-O1、-O3 和 -Os。需要注意的是,过度优化可能导致调试困难和代码行为变化,因此在选择优化级别时,应根据具体应用场景和需求进行权衡。描述: 在 -O2 的基础上,进行优化以减少可执行文件的体积,可能会牺牲一些执行效率。一般优化: 使用 -O2,在编译时间和执行效率之间取得平衡,适用于大多数应用。描述: 在 -O1 的基础上,启用更多优化选项,进一步提高代码执行效率。生成的可执行文件体积可能增大。
2025-03-26 16:43:44
99
原创 Qt中10倍提升动态截屏及渲染60帧/秒
代码会暂停在打开模态窗口的位置,等待窗口关闭后才继续执行后续逻辑。通过上述方法,可确保非模态子窗口的内容被正确捕获并合成到主截图中。窗口可见性检查:通过IsWindowVisible过滤隐藏窗口。主线程捕获全屏帧,子线程处理坐标计算和图像裁剪,减少单帧延迟。通过目标窗口及其子窗口的屏幕坐标,从全屏帧中提取所需内容。需要持续交互的辅助窗口(如工具面板、实时预览窗口等)。坐标转换:确保子窗口位置相对于主窗口正确偏移。性能优化:若窗口频繁更新,考虑缓存或增量截图。窗口打开后代码继续执行,不等待窗口关闭。
2025-03-25 08:29:25
852
原创 QTableModel QTableView QTableWidget 详细对比
QTableView 适合复杂的表格数据展示,支持自定义视图,滚动、排序和编辑等功能。在 Qt 中,QTableModel、QTableView 和 QTableWidget 都涉及到表格控件的实现,但它们的使用场景和功能有所不同。使用场景:适用于数据量较小,且不需要复杂数据操作的情况。对于简单的表格展示,QTableWidget 是一个方便的选择,因为它省去了自定义模型的复杂性。QTableView 与 QTableModel 配合使用,适用于更复杂和动态的数据展示需求,支持更高的定制性和灵活性。
2025-02-14 10:43:19
913
原创 C++20 多线程机制
std::jthread:自动管理线程生命周期,支持停止令牌。停止令牌:提供了一种优雅的线程停止机制。std::latch 和 std::barrier:用于线程同步。std::counting_semaphore:用于控制资源访问。std::atomic_ref:允许对非原子对象进行原子操作。C++20 的多线程特性使得并发编程更加安全和高效,建议在实际项目中充分利用这些新特性。
2025-02-13 11:19:22
134
原创 数据库存储过程和QT数据库访问并获取返回值的几种方式
在 Qt 中使用 QSqlQuery 执行存储过程时,如果存储过程有 RETURN 值,但执行成功后没有返回任何结果,这通常是因为存储过程的 RETURN 值并不会像 SELECT 查询那样作为数据集返回。QSqlQuery::exec() 只能执行 SQL 查询,返回的是查询结果集:如果存储过程包含 RETURN 值而没有 SELECT 语句,Qt 的 QSqlQuery::exec() 只会执行存储过程,但不会捕获 RETURN 值。存储过程的执行成功与否并不等同于它返回的结果集。
2025-01-21 10:17:54
1093
原创 QT 占位符的用法
QString(“Elapsedtime:%1seconds”).arg(elapsed_seconds.count())的作用是动态生成字符串,按顺序用arg()的参数替换字符串中的占位符%1。%1以数字表示,占位符可以有多个,例如%1、%2、%3等,分别对应arg()函数中的第一个、第二个、第三个参数。count()是std::chrono::duration的方法,用于获取该时间间隔的数值。arg()是QString的成员函数,用于替换占位符%1,%2等。
2025-01-20 15:29:39
751
原创 Qt 自动根据编译的dll或exe 将相关dll文件复制到目标文件夹
通过将 Qt 安装目录下的 bin 文件夹路径添加到 Path 环境变量中,或者直接在 Qt bin 目录中运行 windeployqt,就可以解决这个问题。如果你在使用 windeployqt 时遇到错误 “windeployqt 不是内部或外部命令”,说明你的命令行环境没有正确配置 Qt 工具路径。windeployqt 是 Qt 工具的一部分,它用于自动将所有必要的 Qt 库和插件复制到你的应用程序目录中。这样会确保正确找到 windeployqt 工具并运行。
2025-01-14 09:11:43
440
原创 VS2022 项目文件批量转UTF8(WIN11 24H2验证有效)
如果在使用 PowerShell 脚本转换文件编码后,文件中的中文出现乱码,可能是因为文件在读取时没有正确地识别原始编码,导致中文字符在转换过程中丢失或变成乱码。可能的原因:1. 原始文件编码不明确:如果文件是使用 GBK 或 GB2312 编码(常见于简体中文环境下的文件),而 PowerShell 默认按 UTF-8 编码读取文件,那么中文字符会被错误地解析。2. 没有正确地处理 BOM:在处理编码时,缺少字节顺序标记(BOM)可能会导致某些工具和程序无法正确识别文件编码。
2025-01-09 14:49:13
728
原创 QT升级及下载缓慢的问题解决办法
和前面安装类似 但是升级对应的对象使用的不是 qt-online-installer-windows-x64-4.8.1.exe 而是安装目录下面的 MaintenanceTool.exe 操作和前面方法一致。以上即可解决安装慢合升级慢的问题!
2025-01-09 14:05:32
1301
1
原创 C++ 20 中 vector list stack queue 分别从功能 效率等全方面分析其差异
综合来看,不同容器适用于不同场景,应根据需求选择最合适的容器,以优化性能和代码可读性。适用场景:适合任务调度、消息队列等 FIFO 应用场景。优势:支持随机访问、内存连续、缓存友好、尾部插入高效。优势:语义清晰,操作简单,后进先出(LIFO)模式。优势:语义清晰,操作简单,先进先出(FIFO)模式。适用场景:需要随机访问、内存紧凑、高效遍历的场景。劣势:内存利用率低,遍历性能差,随机访问不支持。优势:中间插入和删除效率高,支持双向遍历。适用场景:需要频繁在中间插入和删除的场景。
2024-11-21 10:25:28
237
原创 SQLITE 构建多表查询
如果你有具体的查询需求,可以提供更多的细节,我可以帮你构建更精准的查询。在SQLite中,构建多表查询时,最常用的方式是使用 JOIN 操作符来连接多个表。SQLite不支持 RIGHT JOIN,但你可以通过调换表的位置并使用 LEFT JOIN 来实现相同的效果。这个查询会返回所有学生及其课程,即使某些学生没有选课(没有匹配到课程表中的数据)。CROSS JOIN 返回两个表的笛卡尔积,即每个表中的所有记录的组合。这个查询返回所有学生及其所选课程,前提是学生和课程在各自的表中都存在。
2024-10-05 12:44:30
823
PortHelper.exe
2023-05-10
SM-Bluetooth
2023-05-10
C++ DLL反汇编&C# Dll反汇编工具
2022-09-27
PlantSimulation中文帮助文档
2022-06-25
AUTOCAD 2004/AUTOCAD 2008 条形码CODE128生成
2017-12-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人