2023年12月2日发(作者:)

VS系列+QT5开发遇到的部分问题以及解决方案 VS2010+QT5开发所踩过的坑 最近因为项目需要,vs中写QT,各种踩坑,就想把最后解决的,各种错误和对应的解决方法分享出来,有些是百度别人的,这里把自己成功解决的问题和方案贴出来。 1.错误: C1083 fatal error C1083: 无法打开预编译头文件:“”: No such file or directory“Rebuild All”没有解决,然后把“C/C++”属性中的“预编译头”由“使用(/Yu)”改为“创建(/Yc)”,问题解决了。看来还是预编译头文件创建的有问题,仔细想一下,vc工程的预编译头是由编译生成的。(其实起作用的是stdafx.h,但头文件不参加编译,所以需要文件,这个文件里只有一句代码:#include“Stdafx.h”。) 综上:最妥善的解决方法就是,在工程属性中,选择“使用(/Yu)”预编译头,而单独将设置为“创建(/Yc)”预编译头。 关于“预编译头”的作用,参考如下:在很多程序中,每个源文件都存在一些相同的部分。比如要包含相同的一些头文件,而且这些头文件可能很长,例如window.h。如果用普通的方法编译这些源文件,对这些头文件在每个源文件中的出现都要重新编译,作了很多重复工作。如果能将这些头文件专门进行编译,并且把结果存储起来。然后在编译包含这些头文件的源文件时,使用上述结果替代头文件在源文件中的出现,就可以大大减少工作量。Microsoft Visual C++提供的“预编译头文件”机制就支持这一功能。所谓的预编译头就是把一个工程中的那一部分代码,预先编译好放在一个文件里(通常以.pch为扩展名),这个文件就称为预编译头文件。这些预先编译好的代码可以是任何的C/C++代码——–甚至是inline的函数,但必须是稳定的,在工程开发的过程中不会被经常改变。如果这些代码被修改,则需要重新编译生成预编译头文件。注意生成预编译头文件是很耗时间的。同时得注意预编译头文件通常很大,通常有6-7M大。注意及时清理那些没有用的预编译头文件。因为项目创建时候,没有添加预编译头stdafx.h文件,所有后面添加的时候,需要如上设置 2. VS和QT5打包的程序到其他机器不能运行 解决: 1.把所有程序所需要的QT的dll库全拷贝到debug目录下 所需要的之类的Windows的在system32或syswow64目录下的dll库拷贝进去 3.最关键的:出现如下错误:

解决如下:中写一行 QApplication::addLibraryPath("./plugins"); 然后将你QT安装路径下的 如下图的两个文件夹imageformats和platform,拷到debug目录下,就可以到其他的机器上跑了。win7和win10的区别在于 ,和,的区别 3.

error C2011: “s_buffer”:“struct”类型重定义 解决:h文件头加#pragma once4.在更新VS2010,或者卸载VS2012安装2010后,或者安装VS2010的插件之后,建立Win32 Console

Project/MFC/QT原本可以编译成功的项目时会出现"LINK : fatal error LNK1123: 转换到 COFF 期间失败:

文件无效或损坏"的错误。错误描述:1>正在编译资源...1>正在编译资源清单...1>正在链接...1>LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏1>生成日志保存在“file://E:HelloCShapeFill ”1>ShapeFill- 1个错误,0个警告========== 全部重新生成: 0 已成功, 1 已失败, 0 已跳过 ==========解决方案: 第一步:将 项目——项目属性——配置属性——连接器——清单文件——嵌入清单 “是”改为“否”。若还不能解决问题进入第二步。第二步:查看计算机是否为64bit操作系统,如是,继续如下操作。查找是否有两个。C:Program Files(x86)Microsoft Visual Studio (删除这个就可以编译运行了)C:右键属性—详细信息, 查看两者版本号,删除/重命名较旧的版本,或者重新设置Path变量。

治本的办法是第二步,删除旧版本的后,就不需要每次都设置配置了。

5.

error C4996: 'mkdir': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformantname: _mkdir. See online help for details.

这是在vs2015中使用mkdir函数报错的。 一般用scanf 或者 sprintf 之类的函数, 会报安全问题,加个 _CRT_SECURE_NO_DEPRECATE 宏就可以了,但这种问题在VS 2012之前的版本中是不会当做错误的,只是提出一个警告。为了避免报错,可以使用以下两个宏定义来屏蔽掉这种 错误。在文件的属性->c/c++->预处理器->预处理器定义 中添加如下两个宏定义: _CRT_SECURE_NO_DEPRECATE

_CRT_NONSTDC_NO_DEPRECATE

6.编译效率问题: 添加自定义的stdafx.h头文件的时候,如果都使用Yc编译会很慢,这里使用:于是把原工程的属性改为使用预编译头(/Yu),仅仅把改为创建预编译头(/Yc)。 2010中自己编程时遇到这个问题:_WIN32_WINNT not defined. Defaulting to _WIN32_WINNT_MAXVER (see WinSDKVer.h)解决办法:在stdafx.h中添加宏定义:“#define _WIN32_WINNT 0x0502”。