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;
}

通過這兩個步驟,就可以抓取指定窗口的圖片,並顯示保存;也可以抓取正在播放的視頻畫面;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章