QT截图widget子窗口的图片

QT截取子窗口或者播放窗口图片分为两个步骤,先获取子窗口widget在屏幕中的坐标和宽高,然后调用抓取屏幕图片的方法抓取子窗口坐标和宽高的表示的区域;

 

 

(1)子窗口获取相对屏幕的坐标

假如要抓取子窗口widgetmid的图片,先计算widgetmid在整个屏幕中的坐标;

复制代码
   QRect widgetRect;
    //widgetmid在屏幕中的坐标
    QPoint point = ui.widgetmid->mapToGlobal(QPoint(0, 0));
    widgetRect.setX(point.x());
    widgetRect.setY(point.y());
    //widgetmid的宽高
    widgetRect.setWidth(ui.widgetmid->width());
    widgetRect.setHeight(ui.widgetmid->height());
    //抓子窗口区域图片,并显示在CutPicWidget
    m_CutPicWidget.CutWidgetPic(widgetRect);
    //m_CutPicWidget显示窗口截图,覆盖在ui.widgetmid之上
    m_CutPicWidget.setGeometry(0, 0, ui.widgetmid->width(), ui.widgetmid->height());
    m_CutPicWidget.show();
    m_CutPicWidget.raise();
复制代码

(2)抓取区域图片并保存

QPixmap m_widgetScreenPic;是一个变量

复制代码
int CutPicWidget::CutWidgetPic(QRect rect)
{
    //抓取区域截图
    QScreen *screen = QGuiApplication::primaryScreen();
    m_widgetScreenPic = screen->grabWindow(0, rect.x(), rect.y(), rect.width(), rect.height());//抓取widget的图片
    m_widgetScreenPic = m_widgetScreenPic.scaled(QSize(rect.width(), rect.height()), Qt::KeepAspectRatio);
    //显示图片
    ui.labelPic->setPixmap(m_widgetScreenPic);
    //保存图片
    QString filePathName = "cut-";
    filePathName += QDateTime::currentDateTime().toString("yyyyMMddhhmmsszzz");
    filePathName += ".png";
    filePathName = QDir::currentPath() + "/" + filePathName;
    m_widgetScreenPic.save(filePathName);
    return 0;
}
复制代码

通过这两个步骤,就可以抓取指定窗口的图片,并显示保存;也可以抓取正在播放的视频画面;

posted @   一字千金  阅读(1057)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
历史上的今天:
2017-11-23 makefile编写--引用
点击右上角即可分享
微信分享提示