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; }
通过这两个步骤,就可以抓取指定窗口的图片,并显示保存;也可以抓取正在播放的视频画面;
    自己开发了一个股票智能分析软件,功能很强大,需要的关注微信公众号:QStockView
 
                    
                
 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号