Qt如何实现屏幕录制控件
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,这篇文章主要介绍了Qt如何实现屏幕录制控件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、前言在平时的写作过程中,经常需要将一些操作
千家信息网最后更新 2025年12月02日Qt如何实现屏幕录制控件
这篇文章主要介绍了Qt如何实现屏幕录制控件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
一、前言
在平时的写作过程中,经常需要将一些操作动作和效果图截图成gif格式,使得涵盖的信息更全面更生动,有时候可以将整个操作过程和运行效果录制成MP4,但是文件体积比较大,而且很多网站不便于上传,基本上都支持gif动图,一般一个5秒左右的gif,800*600分辨率,可以很好的控制在500KB内,这样就比较完美的支持各大网站上传动图。 最开始使用的是ScreenGif.exe,用了很久,感觉还可以,后面一个朋友推荐用LICEcap.exe,体积更小,压缩比更高,再到后来发现有个gif.h开源的类,调用其中的方法可以实现将多张图片合并到一张gif中去,而且还是跨平台的,本人亲自在WIN+UBUNTU测试成功。 最初的代码是倪大侠给的,我在此基础上重新完善了下,使得可以直接拖动窗体大小来改变录屏区域的大小。增加了对Qt4和其他编译器的支持。
主要功能:
可设置要录制屏幕的宽高,支持右下角直接拉动改变.
可设置变宽的宽度
可设置录屏控件的背景颜色
可设置录制的帧数
录制区域可自由拖动选择
二、代码思路
void GifWidget::saveImage(){ if (!gifWriter) { return; }#if (QT_VERSION <= QT_VERSION_CHECK(5,0,0)) //由于qt4没有RGBA8888,采用最接近RGBA8888的是ARGB32,颜色会有点偏差 QPixmap pix = QPixmap::grabWindow(0, x() + rectGif.x(), y() + rectGif.y(), rectGif.width(), rectGif.height()); QImage image = pix.toImage().convertToFormat(QImage::Format_ARGB32);#else QScreen *screen = QApplication::primaryScreen(); QPixmap pix = screen->grabWindow(0, x() + rectGif.x(), y() + rectGif.y(), rectGif.width(), rectGif.height()); QImage image = pix.toImage().convertToFormat(QImage::Format_RGBA8888);#endif gif.GifWriteFrame(gifWriter, image.bits(), rectGif.width(), rectGif.height(), fps); count++; labStatus->setText(QString("正在录制 第 %1 帧").arg(count));}void GifWidget::record(){ if (btnStart->text() == "开始") { if (0 != gifWriter) { delete gifWriter; gifWriter = 0; } //先弹出文件保存对话框 //fileName = qApp->applicationDirPath() + "/" + QDateTime::currentDateTime().toString("yyyy-MM-dd-hh-mm-ss.gif"); fileName = QFileDialog::getSaveFileName(this, "选择保存位置", qApp->applicationDirPath() + "/", "gif图片(*.gif)"); if (fileName.isEmpty()) { return; } int width = txtWidth->text().toInt(); int height = txtHeight->text().toInt(); fps = txtFps->text().toInt(); gifWriter = new Gif::GifWriter; bool bOk = gif.GifBegin(gifWriter, fileName.toLocal8Bit().data(), width, height, fps); if (!bOk) { delete gifWriter; gifWriter = 0; return; } count = 0; labStatus->setText("开始录制..."); btnStart->setText("停止"); //延时启动 timer->setInterval(1000 / fps); QTimer::singleShot(1000, timer, SLOT(start())); //saveImage(); } else { timer->stop(); gif.GifEnd(gifWriter); delete gifWriter; gifWriter = 0; labStatus->setText(QString("录制完成 共 %1 帧").arg(count)); btnStart->setText("开始"); QDesktopServices::openUrl(QUrl(fileName)); }}三、效果图
感谢你能够认真阅读完这篇文章,希望小编分享的"Qt如何实现屏幕录制控件"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!
支持
篇文章
可设
屏幕
控件
效果
代码
体积
区域
图片
大小
效果图
文件
朋友
过程
选择
价值
位置
兴趣
分辨率
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
重庆物流软件开发收费多少
公司数据库怎么做
软件开发33岁了怎么办
深圳服务器系统集成服务方案费用
软件开发需要注意什么意思
可视化数据库开发
公司邮箱服务器地址在哪看
ado数据库访问实验
电脑和服务器区别
学c语言能做网络安全吗
软件开发app公司如何选择
经开区软件开发专业
班级网络安全宣传班会背景图
国家网络安全保卫工作总结
高并发数据库分库分表
河南人工智能软件开发定制
实时获取数据库更新
r230服务器散热报警
戴尔服务器720
软件开发实习周报6
计算机网络安全竞赛官网
联想服务器sr588驱动安装
松江区企业网络技术服务口碑推荐
服务器的显示屏怎么连接电脑
南京果蔬配送软件开发
数据库文件格式
罗湖区网络技术转移郑重承诺
网络安全管理大队信息通信
国土局 网络安全管理制度
上海名创网络技术有限公司