Qt如何实现屏幕录制控件
发表于:2025-02-24 作者:千家信息网编辑
千家信息网最后更新 2025年02月24日,这篇文章主要介绍了Qt如何实现屏幕录制控件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、前言在平时的写作过程中,经常需要将一些操作
千家信息网最后更新 2025年02月24日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安全错误
数据库的锁怎样保障安全
杭州助力智慧小区软件开发
SCIP数据库中高度关注物质
服务器不盖盖子可以开机么
关系型数据库 olap
开启数据库的指令
计算机网络安全286条
松江区企业数据库研发价格表格
连接到官方服务器失败是什么原因
底层软件开发岗职责
航天信息a3数据库离线
倩女幽魂挣钱软件开发
杭州区 软件开发公司
无感支付加油站软件开发
原生态软件开发
道森数据库培训
富阳区手机软件开发
呼和浩特项目软件开发
ios软件开发自荐信
长尾数据库
云丁网络技术 知乎
数据库怎么定义一个数组
虚拟机里可以用数据库吗
琛帛软件开发服务部
湖北通信软件开发设施检测中心
江西群华软件开发
采集网页数据库
手机地图软件开发
数据库和服务器有什么不一样
上海点正互联网科技怎么样
互联网科技的发展英语翻译