Qt 用法使用注意事项 (长期更新)

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

你可能感兴趣的:(QT开发,Qt)