QT+winodow 代码适配调试总结(二)

已经好多年了, linux环境下不同版本的QT程序开发和部署,突然需要适配window环境程序调试,一堆大坑,还真是一个艰巨的任务,可是kpi下的任务计划,开始吧!!

1、首先我们自定义的动态库,大多数不规范,所谓跨平台,只能说是QT本身的框架,实际自定义的动态库极其不规范, 大多数的动态库没有实现功能独立的功能,数据重定义和相互依赖是很头疼的事情,趁此机会斩断互相的网,逐步完成动态库的window适配,根据window环境的要求实现;

简单梳理一下过程:

A:自定义动态库中的总会有一个全局的文件,定义库导入和导出的宏

#ifdef AMS_SERVERDLL_EXPORTS

#define MODBUSTCP_AMS_SERVERDLL_API Q_DECL_EXPORT

#else

#define MODBUSTCP_AMS_SERVERDLL_API Q_DECL_IMPORT

#endif

B: 重点注意pro文件中需要包含:

DEFINES += AMS_SERVERDLL_EXPORTS

C: 对于暴露给外部调用的类,需要增加MODBUSTCP_AMS_SERVERDLL_API的约束,否则主程序调用会提一堆:LNK2019: 无法解析的外部符号

2、其次:linux环境移动过来的动态库编码格式不统一,网上很多高招,尝试一遍不是很理想,尽管各种位置的设置UTF-8 , 代码中中文字符和中文注释成了调试的大问题,莫名其妙的问题,总结一下终极的方案: 下载安装Notepad++ 工具,针对莫名其妙问题的代码进行格式转换,转为UTF-8 BOM格式保存,问题就会解决成千上万;

3 另外程序运行之后弹窗和打印的日志为乱码,问题不是很严重,也很容易解决,方案如下:

在项目文件pro文件中增加下面语句:

复制代码
win32:msvc{    
        QMAKE_CXXFLAGS += /source-charset:utf-8 /execution-charset:utf-8
}

4 对于调用mysql驱动的问题,linux环境需要安装mysql的客户端,window环境下不需要安装,但是需要可执行程序的位置拷贝libmysql.dll 驱动文件。

5、linux环境下 数据初始化可以使用变量初始化,但window环境下不允许

例如:

int iDataCnt = 100;

int iParamiDataCnt ;

这种linux环境下可以,但window环境不可以,window环境下不能使用变量,可以使用宏定义

int iParam100; 或者

#define DATA_CNT 100

int iParamDATA_CNT;

6、类似数据函数和宏定义M_PI window 无法识别,需要再pro 增加

DEFINES += _USE_MATH_DEFINES

7、其他入结构体对象和qvector赋初值,不允许直接通过 {}的方式,需要通过对象的单独赋值

例如:

Act act;

act.act = false;

act.row = 12;

act.col = 34;

不允许

Act act{false, 12, 34};

其他的问题有时间继续补充。

相关推荐
java1234_小锋3 分钟前
LangChain4j 开发Java Agent智能体- 整合SpringBoot4
java·开发语言·langchain4j
我不是懒洋洋10 分钟前
从零实现一个Redis客户端:RESP协议与网络编程
开发语言·c++
小小码农Come on15 分钟前
Qt::WA_StyledBackground属性的作用
开发语言·qt
许彰午18 分钟前
04_Java数组操作全解
java·开发语言·python
码不停蹄的玄黓20 分钟前
Java 线程池 execute() 和 submit() 对比
java·开发语言
秋田君20 分钟前
2026 前端新出路:掌握 C++ 核心语法,无缝衔接 QT 桌面开发
前端·c++·qt
方也_arkling27 分钟前
【Java-Day19】集合1(Collect单列集合)
java·开发语言
Xin_ye1008634 分钟前
C# 零基础到精通教程 - WPF 专题三:高级控件与自定义控件
开发语言·c#·wpf
SoftLipaRZC39 分钟前
C语言自定义类型:结构体完全指南
c语言·开发语言
方也_arkling41 分钟前
【Java-Day19】集合3 List中常见的方法和5种遍历方式
java·开发语言