QScreen::grabWindow抓取屏幕 & 獲取窗口中控件位置信息


QScreen::grabWindow抓取屏幕

原型:QPixmap QScreen::grabWindow(WId window, int x = 0, int y = 0, int width = -1, int height = -1)

 如果第一個參數為0,那就是抓取以桌面上(x,y)為左上角點,寬為width,高為height的矩形。如果第一個參數為某個窗口的WId(句柄),那這個抓取范圍就是相對於這個窗口而言的。

因為QScreen不可以直接實例化,所以一般通過下面方式獲得其對象:

QScreen *screen = QGuiApplication::primaryScreen(); screen->grabWindow(this->winId(),0,0,-1,-1).save("captureImg.jpg","jpg");
QImage image = screen->grabWindow(0, 0, 0, QApplication::desktop()->width(), QApplication::desktop()->height()).toImage();

還可以通過下面方式(上面更常用)

   QWindow *window = windowHandle(); //因為QScreen沒有構造函數,所以通過上面這種方式獲取一個
    QScreen *screen = window->screen();

 

獲取窗口中控件位置信息

我做的這個項目把所有控件用QBoxLayout布局控制,之后使用某個控件的時候打印其位置信息

qDebug() << m_pViewerWidget->frameGeometry().x() << m_pViewerWidget->frameGeometry().y() << m_pViewerWidget->frameGeometry().width() << m_pViewerWidget->frameGeometry().height() <<endl;

發現控件的寬和高都沒有問題,但是打印出來的(x,y)坐標是(0,0)

解決方法:

QPoint point = m_pViewerWidget->mapToGlobal(QPoint(m_pViewerWidget->x(), m_pViewerWidget->y())); qDebug() << point.x() << point.y() << endl;

 

主要是Qt程序中大多東西不能寫死,所以就需要函數來實時獲取它的位置信息

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM