其他分享
首页 > 其他分享> > Qt开发经验小技巧236-240

Qt开发经验小技巧236-240

作者:互联网

  1. 关于在头文件中定义函数使用static关键字的血的教训。
//文件名 test.h

//下面这个函数 编译报错提示 “重复定义”
void test() {}

//下面4个函数在每个引入头文件的时候都会被拷贝一份
static void test1() {}
inline void test2() {}
static inline void test3() {}
inline static void test4() {}

//保证没问题的写法
class tt {
    void test() {}
    static void test1() {}
    inline void test2() {}
    static inline void test3() {}
    inline static void test4() {}
}
  1. 在数据库查询中,一般会建立索引以便加快查询速度,比如常用的条件字段作为索引字段。但是有些时候如果查询语句没写好,就算where中有索引字段也会引起全表扫描,也就是说根本没用上索引,这点要积极的避免。
  1. 由于Qt在不断的更新换代,各种组件轮子也在增加、拆分、调整等,所以我们在编写项目的时候,如果有版本兼容的问题,就需要在pro项目文件和代码文件中做对应的判断处理。根据多年的经验总结,一个万能的办法就是在pro中增加一个DEFINES标识,然后根据这个DEFINES标识引入对应模块,最后在代码中通过#ifdef判断标识执行对应代码。经过这样倒腾几下你的代码可以在低版本和高版本编译运行。
//pro pri 文件
//下面表示主版本>4子版本>6 即版本>=5.7
greaterThan(QT_MAJOR_VERSION, 4) {
greaterThan(QT_MINOR_VERSION, 6) {
DEFINES += qchart
}}

//由于Qt6的发布以及以后Qt7、Qt8等,光有上面这个判断是不够的的
//下面表示Qt主版本>5 即版本>=6.0
greaterThan(QT_MAJOR_VERSION, 5) {
DEFINES += qchart
}

//判断有定义则导入对应模块
contains(DEFINES, qchart) {
QT += charts
}

//代码文件
#ifdef qchart
//要执行的代码
#endif
  1. 在使用QChart图表控件的时候,你会发现默认的边距好大,很多时候我们希望能显示更多的信息,紧凑型的界面,所以需要设置边距。
//设置背景区域圆角角度
chart->setBackgroundRoundness(0);
//设置内边界边距
chart->setMargins(QMargins(0, 0, 0, 0));
//设置外边界边距
chart->layout()->setContentsMargins(0, 0, 0, 0);
  1. Qt内置了数据压缩和解压的功能,如果遇到图片、音频数据、文件等转base64传输这种,采用qCompress压缩后大概可以节省30%的数据传输量,压缩性能可观。前提是双方都是Qt程序,因为收到数据的时候还要用qUncompress解压出来,成对出现的。
//发送的时候压缩下数据
QByteArray buffer = "...";
buffer = qCompress(buffer);
socket->write(buffer);

//收到数据后务必记得先解压再使用
QByteArray data = socket->readAll();
data = qUncompress(data);

国内站点:https://gitee.com/feiyangqingyun
国际站点:https://github.com/feiyangqingyun

标签:Qt,void,索引,全表,static,240,inline,236,函数
来源: https://www.cnblogs.com/feiyangqingyun/p/16585086.html