1, 发布失败问题
如果在本机程序运行正常,拿到别人同样系统机器上运行失败,经常因为缺一些程序运行需要的插件依赖库
2,跨平台代码,未声明的标识符错误
qt程序在linux下正常编译过的源码拿到windows下vs编译出现 未声明的标识符错误时, 考虑文件编码错误引起的问题,看警告提示 ,将文件用nodepad++改为unicode编码
3, 野指针问题。
定义指针变量一定初始化一下,有的编译器处理方式不一样, release下 , 调试模式可能没问题,发布就出现崩溃,像途中报这样指针错误,访问冲突
4, QDebug调试。
qDebug可以像printf()函数一样使用。 像std::cout 一样用需要包含 《QDebug》头文件,release程序的时候不想输出打印信息可以在pro文件DEFINES+= QT_NO_DEBUG_OUTPUT宏,或在预处理里加上,重新编译打印信息就消失了
5, 给程序加管理员权限。
项目, 右键---属性---连接器---清单文件---uac执行级别 选择requireAdministrator 重新编译即可.
6, VS不输出.lib .exp
如果你不想输出的.exe文件夹下面还有.lib和.exp这些杂项,你可以打开: 配置属性 > 链接器 > 高级 > 导入库,在这里修改位置,例如:
$(Configuration)\$(TargetName).lib
.exp也是根据.lib的文件名来生成的。
7, warning LNK4042: 对象被多次指定,已忽略多余的指定
1)、把报LNK4042的.h和.cpp从项目中排除
2)、重新加入排除的.h和.cpp
8,warning LNkMSB8028 The intermediate directory (Debug\) contains files shared from another project (XXXX.vcxproj). This can lead to incorrect clean and rebuild behavior
警告意思在Debug目录下 有另一个项目共享文件 这里的Debug目录是工程文件下目录(Test\Debug, 手动删除Debug文件夹 重建工程解决
9, 编程习惯(很重要)
1) 少用字面常量,或 无意义的数字 如 ==1,==2 ,==3, ==“啦啦啦”, 最好定义为const 常变量, 方便调试和维护
2) 日志打印。 打印日志要有 : 文件名 函数 ,函数所在行, 日期, 打印输出的详细语句 等要素,能通过日志一步定位到错误
10, qt5中文编码设置
QT5中文乱码时需要在头文件加上
#pragma once //保证头文件只被编译一次
#if _MSC_VER >= 1600 //VS2010以上
#pragma execution_character_set("utf-8") //设置编译环境为utf-8
#endif
输出中文请使用qDbug()<< "内容";
不要使用cout 这个是无法正常显示中文的.。。。。。。
或者
在 .pro文件中添加
CODECFORSRC = UTF8
或者(这个比较好用,一劳永逸)
DEFINES -= UNICODE
msvc:QMAKE_CXXFLAGS += -execution-charset:utf-8
11, 系统找不到指定路径,.... cmakelists.txt ,,,,, C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(171,5): error MSB6006 cmd.exe 已退出,代码为3问题
解决:编辑.vcxproj工程文件,搜索CustomBuild,查看包含的路径,修改后问题解决。
12, QMessageLogContext内容为空
Release版本的输出却没有文件信息、行数等信息,如图。
原因是:文件信息、行数等信息在Release版本默认舍弃。我们只要在.pro文件定义一个宏
DEFINES += QT_MESSAGELOGCONTEXT
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)