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程序中大多東西不能寫死,所以就需要函數來實時獲取它的位置信息