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

  • 相关阅读:
    Python常用函数
    MySQL常用操作
    Python与JAVA的异同
    token
    用户cookie和会话session、sessionID的关系
    Jenkins应用
    Python3 logging模块
    python 多线程threading模块
    引用的声明周期结束时,并不会调用析构函数,只有本体的声明周期结束时,才会调用析构函数
    行为像指针的类的对象每次作为参数传入函数或者传出函数时都要小心
  • 原文地址:https://www.cnblogs.com/kongbursi-2292702937/p/15078817.html
Copyright © 2011-2022 走看看