当前位置: 首页 > web >正文

Qt开发经验 --- 避坑指南(9)

文章目录

    • @[toc]
      • 1 信号槽
        • 1.1 清空信号槽队列
      • 2 查找未使用函数
      • 3 日志功能
      • 4 qt cmake执行install
      • 5 数据库获取查询行数
      • 6 Qt调用ffmpeg命令行录屏

更多精彩内容
👉内容导航 👈
👉Qt开发经验 👈

1 信号槽

1.1 清空信号槽队列
  • 当信号和槽函数分别在两个线程内时,默认使用的时基于事件循环的消息队列来进行通信,或者connect第五个参数使用Qt::QueuedConnection,这时信号触发槽函数是异步的(实际上使用过生产者消费者模式);
  • 而信号槽的消息队列对开发人员来说是不可见的,所以不知道队列大小,容量;
  • 这就会造成一个很严重的问题,当每1秒发出10个信号,而槽函数每一秒只能执行完成1次,就会有9个已经发出的信号得不到处理,会等待在队列中,时间长了后会导致数据越来越多,出现内存泄漏、溢出等问题。
  • 而网上查找清空信号槽队列一般都是使用disconnect断开信号槽链接,但实际上这功能是无效的,断开链接后只是不会再增加新的信号,而已经存在与消息队列中的信号还存在。
  • 所以这里就可以使用QCoreApplication::removePostedEvents(this, QEvent::MetaCall);来清空信号槽消息队列。

2 查找未使用函数

  • Qt Creator14
  • 鼠标在工程上右键选择【Find Unused C/C++ Functions】;

在这里插入图片描述

3 日志功能

使用qDebug封装日志功能

优点:

  • 使用简单;
  • Qt底层库的日志信息也可以记录到文件;

缺点:

  • 需要自己对qDebug功能进行封装。

  • 稳定性需要看自己封装得好不好。

  • 在使用mingw编译器时性能会恶化很多(二十倍)。

使用spdlog日志库

优点:

  • 无需封装;
  • 功能稳定,性能强大;

缺点:

  • 使用相对qdebug复杂一些;
  • 需要自己编译配置。
编译器编译模式spdlogqDebug
mingw730debug673445871
mingw730release660940740
msvc2022debug102973098
msvc2022debug105403099
msvc2022release108012499
msvc2017debug76093032
msvc2017release70712153
mingw1310debug812557725
mingw1310release857238908

在这里插入图片描述

4 qt cmake执行install

  • 在Qt中使用cmake编译后需要执行install安装编译后的库;
  • 选择【项目】【构建步骤】,勾选install;

在这里插入图片描述

5 数据库获取查询行数

  • qt使用sqlite数据库时,调用int QSqlQuery::size()无法返回行数,只能返回-1,可以通过下面代码计算行数;
query.last();    // 定位到最后一项
int size = query.at() + 1;  // 获取大小
query.first();  // 返回第一项
query.previous(); // 定位前一项(开始位置)

6 Qt调用ffmpeg命令行录屏

  • 使用ffmpeg录屏时如果使用mp4格式,当程序异常退出后mp4视频会出现moov损坏,视频无法播放,使用mkv格式可以避免。
QProcess process;
void start()
{QStringList arg;arg << "-f"<< "gdigrab"<< "-i"<< "desktop"<< "1.mkv";   // 录制视频使用mkv格式可以防止视频损坏process.start("ffmpeg.exe", arg);
}void stop()
{process.write("q");  // 停止录屏
}


http://www.xdnf.cn/news/5060.html

相关文章:

  • CST仿真喇叭/波导相位中心
  • 面对渠道竞争,品牌该如何应对?
  • Base64 编码原理详细解析
  • OpenManus中使用命令行运行py脚本报错
  • NoMachine 将虚拟显示器改为物理显示器
  • 树初步 #1(插排串联 - 辽宁省2024CCPC)
  • 【C】初阶数据结构15 -- 计数排序与稳定性分析
  • 报表控件stimulsoft教程:使用 JoinType 关系参数创建仪表盘
  • 番茄爽文小说,叙事技巧情感设计有哪些?
  • 实现线程的4种方法
  • 深入理解主从数据库架构与主从复制
  • AD 排针类元件模型的创建
  • 影刀RPA开发-智能录制
  • MySQL 第三讲---基础篇 库与表操作(下)
  • 华为防火墙双机热备(负载分担)
  • U9C-SQL-调出单视图
  • 小厂golang面经
  • Delphi12安装Android开发的配置
  • 盖雅工场人效飞轮数字化套件入选36氪AI原生应用创新案例
  • Path to Integer_ABC402分析与解答
  • 理解 Envoy 的架构
  • MIMO 检测(1)--接收机模型
  • leetcode0310. 最小高度树-medium
  • 高频数据结构面试题总结
  • [AI Tools] Dify 平台插件开发全解:如何构建 Tools 插件并解析输出逻辑
  • RT-Thread 深入系列 Part 2:RT-Thread 内核核心机制深度剖析
  • 将 iconfont 图标转换成element-plus也能使用的图标组件
  • Spring Cloud 以Gateway实现限流(自定义返回内容)
  • 经过多年发展,中国机械工业已经具备了独特的国际比较优势
  • 鱼眼摄像头(一)多平面格式 单缓冲读取图像并显示