1. 不要阻塞Qt的事件处理函数,某些个别特殊的除外!(比如:contextMenuEvent)
原因: 阻塞Qt的事件处理函数,可能导致当前事件的后续的事件处理流程错误。
2. 在使用VS编译器编译的时候,如果报错:(一般是带有中文,错误原因可能是缺少后引号,可以切换查看编码来查看)
***.cpp,error: C2001: 常量中有换行符。。。
请修改(报错的)源文件编码为ANSI或者UTF-8-BOM,优先改为UTF-8-BOM
3. Qt的pro文件不仅仅能判断操作系统,还能判断编译器。更多东西可以看看Qt的SDK里的mkspecs目录里面的文件。
4. 在QtPro文件里面指定需要安装的文件格式:(deploy是个自定义的名字,就像一个对象,同时也可以创建多个)
deploy.files = 文件列表(具体文件名,多个文件用空格隔开即可)
deploy.path = 文件部署的路径
INSTALLS += deploy
5. https://unicode.org/charts/PDF // 字符编码
6. QMap的[]操作符和value函数的区别
[] 操作符返回对应key的value,但是如果对应的key不存在,它会插入一个默认键值,相当于多了一个插入操作。
value 同样返回对应key的value,但是如果没有对应的key,它只是返回一个默认值,并不会插入键值。
7. QPixmap和QImage的区别
在很多博客里面都说了QPixmap和QImage的区别,但大多数都是依葫芦画瓢,跟着别人说的,没有自己的见解,描述大同小异,我这里说下我认识的两种区别:
1). QPixmap是和操作系统相关的一个绘制设备,比如windows可以通过系统API创建Pixmap的画布(可能会用到显存)。然而,如果系统没有的话,Qt在创建QPixmap的时候是创建一个和屏幕图片格式一样的格式的QImage,因此创建QPixmap是不能自定义设置格式的。这种情况下,可想而知,QPixmap就是QImage,但是在绘制的时候它少了图片格式的转换,肯定比图片格式和屏幕格式不一样的QImage要快。
2). QPixmap在绘制的时候看成是窗口的一部分,不会再进行混合计算(例如:在窗口绘制QPixmap(0,0,100,100),那么(0,0,100,100)这个区域就相当于一个子窗口一样)
因此,如果想做图片修改,千万不要使用QPixmap类来装载绘制。
8. 屏幕取词软件(网易有道),可能造成qtcreator未响应(其实不仅仅是qtcreator,大量的软件好像都有被它搞死的情况),引申可能是屏幕取词的机制导致的,所以或许其他屏幕取词的软件也会出现这种情况。谨记!谨记!谨记!
9. 多注意各种特殊函数的固定参数类型。
1)拷贝构造函数参数只能是引用
2)运算符重载函数参数至少有一个是引用或者值传递(非成员变量)
10. 指针类型是基础类型,包括自定义类的指针,因此,不能对指针类型运算符重载
指针类型和其他基础类型一样,有默认的运算符函数,自定义类的指针同样有。
11. 构造函数内部调用虚函数是不正确的用法,因为在构造函数里面只会调用到当前构造对象对应的虚函数实现。析构函数同理也不正确。
12. 解决字符串乱码的根本是:正确处理字符串编码。因此,请善用QTextCodec
13. qScopeGuard 用于局部作用域清理操作。原理是利用变量退出作用域调用析构函数,可用于函数退出的时候释放资源等情况,配合匿名函数(Lambda表达式)非常方便。
14. Qt经常出现莫名其妙段错误,程序起不了的情况,可以增加环境变量QT_DEBUG_PLUGINS=1,输出插件加载的信息,可能能找到为什么起不来
本文总结了Qt编程中的一些重要注意事项,包括避免阻塞事件处理函数、处理编码问题、理解Qt pro文件的灵活性、QMap与QImage的区别、Qt Creator与屏幕取词软件的冲突,以及使用qScopeGuard等实用技巧。遇到Qt程序异常或段错误时,可以通过设置环境变量QT_DEBUG_PLUGINS来调试。
&spm=1001.2101.3001.5002&articleId=89636109&d=1&t=3&u=85387742383b417e8feb669729d15b1c)
1万+

被折叠的 条评论
为什么被折叠?



