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文件的处理
msvc | win gcc | linux 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