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

  • 相关阅读:
    base64编码
    URL编码和解码
    Android MineType
    Gzip压缩
    关于文件与文件系统的压缩与打包命令-Linux(笔记)
    tesseract的编译安装
    HDOJ How many ways?? 2157【矩阵高速幂】
    [ACM] POJ 3253 Fence Repair (Huffman树思想,优先队列)
    6.非关系型数据库(Nosql)之mongodb:集群(主从复制)
    androidproject有红色叹号的解决方式
  • 原文地址:https://www.cnblogs.com/kongbursi-2292702937/p/15078817.html
Copyright © 2011-2022 走看看