bug实录

QT笔记

常量中不能有换行符(bom)、该文件包含不能在当前代码页表示的字符。

解决方案:
1、设置QTcreator,utf-8需要有bom,因为默认情况下msvc编译器将文件视作本地编码集解码,需要有bom才能识别为utf-8
2、将文件设置为unicode(在第一步设置完后随便改动一下代码文件并重新编译即可)

参考链接:
https://blog.csdn.net/weixin_44916154/article/details/123621002
https://zhoujianwen.blog.csdn.net/article/details/107884083?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-107884083-blog-123621002.pc_relevant_recovery_v2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-107884083-blog-123621002.pc_relevant_recovery_v2&utm_relevant_index=5

中文乱码问题

解决方案:
1、设置项目编辑器的文件编码和工具选项中文本编辑器的文件编码,并且设置文件为unicode。
2、加上pragma预处理指令将执行指令集更换为utf8。

参考链接:
https://blog.csdn.net/qq_41336270/article/details/124925534
https://blog.csdn.net/libaineu2004/article/details/19245205?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0-19245205-blog-124925534.pc_relevant_aa2&spm=1001.2101.3001.4242.1&utm_relevant_index=3这篇博客还没有看完

字符集

ASC2码: 1个字节。
GBK码: 1,2个字节 英文数字占1个字节,以0开头,中文字符占2个字节,以1开头。
Unicode(万国码): UTF-8 可变长编码方案,1,2,3,4个字节表示字符。英文数字占1个字节,中文字符占3个字节。
BOM:标记文件编码方式。

无法解析的外部符号

问题描述:
mywidget.obj👎 error: LNK2019: 无法解析的外部符号 “public: __cdecl MyButton::MyButton(class QWidget *)” (??0MyButton@@QEAA@PEAVQWidget@@@Z),该符号在函数 “public: __cdecl myWidget::myWidget(class QWidget *)” (??0myWidget@@QEAA@PEAVQWidget@@@Z) 中被引用。

原因分析:
1、在.h文件中声明的函数被没有在.cpp中实现。
2、创建一个类后没有生成.obj,这个时候需要qmake一下。

参考链接:
https://blog.csdn.net/shinefriend/article/details/109405042

程序异常终止

原因分析:
1,使用了未经初始化的指针。
2、缺少dll。

参考链接:
https://www.yzktw.com.cn/post/93848.html

头文件互相引用

Unable to paint on Qt Widget, shows error “paintEngine: Should no longer be called”

原因分析:
1、在paintevent之外的地方对部件进行绘画,包括情况如:在父类的paintEvent中对子部件进行绘画。

解决方案:
1、为子部件创建一个类,并在这个类中的paintEvent中进行绘画。
3、为子部件安装事件过滤器处理绘画事件。https://www.cnblogs.com/leocc325/p/14902580.html
4、更改属性,对windows和macos没有用。this->setAttribute(Qt::WA_PaintOutsidePaintEvent);

信号与槽数据类型传递:

1、QImage等。可以传递。
2、自定义数据类型(包含其他非注册数据类型)。
3、传递非注册数据类型如cv中的mat,需要在类定义处注册吗?不需要,只需要在main函数中进行函数注册即可,无需添加注册宏命令

QString的各种函数

1、setRawData和fromRawData没有区别,都是浅拷贝,在修改QString后都会引发深拷贝,区别仅在于一个是静态函数,另一个不是静态函数。
2、setUnicode是深拷贝
3、setUtf16不考虑字节序,fromUtf16考虑字节序且是静态函数,都会引发深拷贝

QT异常结束

1、空指针delete。
2、信号积压挤爆信号队列。
3、多线程内存共享,例如mat,qimage
4、疯狂resize?

ui界面卡顿

1、锁住未解锁。

编译器对cpp文件的处理

msvcwin gcclinux gcc
解码有bom按bom来,没有bom按照本地字符集默认gbk,除非默认utf8,除非gcc 1.c -finput-charset = gbk,gcc 将使用gbk来读取源文件
编码有pragma就按它来,没有就按照本地字符集来默认gbk,除非默认utf8,除非gcc 1.c -fexec-charset = gbk(gcc将使用gbk来存储这些信息文本到可执行文件中)

QString 内部采用的是Unicode。具体一点Windows下用的UCS2,Linux下用的UCS4

//.pro文件中加入一下代码,将执行环境设置为utf8
msvc {
QMAKE_CFLAGS += /utf-8
QMAKE_CXXFLAGS += /utf-8
}

VMware Workstation 与 Device/Credential Guard 不兼容

解决方法:
1、基于虚拟化的安全设置为已禁用。
2、关闭HV主机服务等。

参考链接:
https://blog.csdn.net/lizongti/article/details/128074912

虚拟机一打开就蓝屏

解决方案:
1、打开虚拟机监测功能。
2、禁用HV。
3、升级虚拟机,并非15,而是17。

参考链接:
https://blog.csdn.net/m0_55901666/article/details/124443757

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值