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程序中大多东西不能写死,所以就需要函数来实时获取它的位置信息