qt creator转qt+vs之遇到问题汇总

  • Post author:
  • Post category:其他


前言:

相信很多人一开始接触qt时并没有详细的了解qt的版本、编译器等等,我就是,然后在用了一段时间后发现一些想用的功能在安装的qt版本上实现不了,比如我一开始用qt5.7接触单位的项目,后来发现了qt for Android,然后就转成了qt5.10,再用了一段时间后发现想用自定义控件了,然后才了解到之前一直用的是qt原生的编译器MinGW,要换成MSVC的 编译器才可以实现自定义控件的使用(其实都可以用自定义控件,只是层次水平不够),于是乎就有了 上一个博客配置qt+MSVC2015实现自定义控件使用,然后在后来安装qt时就取消了MinGW的编译器安装,这个都是因个人习惯,我就喜欢简洁所以有一个编译器就只用 一个。后来就发现了几个换完编译器的问题,可能还有新的问题没有发现,以后有新的因 编译器换引起的问题就分享在这个帖子中。

问题1:

发现在使用大佬配置好的自动以控件库时,程序只能release运行,无法debug运行,这就导致无法调试,有些弊端。在不使用自定义控件时,使用qt原生的控件,debug和release模式均可正常运行,说明问题就在于自定义控件 身上,这点到不是因为更换编译器而引起的。但问题的解决方式尚未找到, 今后这个问题解决了会在本博此条问题下更新。

问题2:

发现在打开旧的项目时,编译出现很多错误问题,比如“常亮中存在换行符 ”,“在***后面少)”,或者是汉字输出乱码….这些问题均是由于更换编译器后,汉字编码问题造成的,

错误的解决方式就是双击常量中有换行符错误跳到错误的地方,一定有汉字,然后在汉字中随便找几个字重新打一遍,编码就设置成为了新的格式(qt就是有这个bug),但是这只是解决错误的方式, 在运行起来后汉字部分仍然是乱码的

,这点就显得稍微有些麻烦了,凡事都要有个适应的过程,相信在以后适应一段时间就感觉没什么了。乱码这种问题的解决方式如下:(发现两种方法)

方式一:

ui->label->setText("没有识别到摄像头设备,或没安装驱动");
//换成
ui->label->setText(QString::fromLocal8Bit("没有识别到摄像头设备,或没安装驱动"));

qDebug()<<"==============thread已启动==========";
//换成
qDebug()<<QString::fromLocal8Bit("==============thread已启动==========");

这样以后之前的程序在重新编译就不会出现问题了,但是工作量 有些大哈,以后新的程序在写注意点就 好了。


方式二:

什么都不需要改,只需要在你使用中文字符的头文件中加上一个宏

#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
#endif

即可解决一切 编码带来的问题。

效果展示:

打开一个之前的比较大一些的工程,上来直接编译, 出现了这个多个错误

基本都是这种编码问题,随便点一些c2001型的问题跳到代码部分

重新打印汉字“不存在”,问题就没了

我这个 项目有270+错误,搞起来费劲一些, 以后新的工程就没这个问题了, 接下来是乱码

解决乱码问题用以上两种方法任意一种即可,但是一定注意,两种方法不能混合在一块使用,一起使用的话最终结果还是

乱码!

问题3:

定义动态数组不能用变量

//原:
int a=40;
int bbb[a];
//改:
int a=40;
int *bbb=new int[a];

问题4:

原来的项目有 导出表格功能,在新编译器编译成功后,发现导出Excel功能不好使了

没有注册类问题解决方式:

添加头文件#include “qt_windows.h”

//在创建Excel前加上
HRESULT r = OleInitialize(0);
if (r != S_OK && r != S_FALSE)
{
    qWarning("Qt:初始化Ole失败(error %x)",(unsigned int)r);
}
//...中间代码

//结尾处加上
OleUninitialize();

目前解决了一个问题,还有一个问题是

QAxBase::setControl: requested control Excel.Application could not be instantiated

目前仍未解决,,,待解决继续更新



版权声明:本文为qq_37603131原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。