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

 

posted @ 2021-07-30 14:13  kongbursi  阅读(5502)  评论(0编辑  收藏  举报