当前位置:   article > 正文

QT截屏,截取控件为图片,指定范围截屏三种截屏方式_qt截取指定窗口

qt截取指定窗口

项目中我们常用到截取屏幕,Qt给我的们多种方式:

主要有以下三种:

截取全屏;截取控件为图片;指定位置截屏三种截屏方式;

1.截取全屏

常用:

实现:

  1. QScreen *screen = QGuiApplication::primaryScreen();
  2. screen->grabWindow(0).save("./picture.png", "png");

2.截取控件为图片

 

 实现:

  1. QScreen *screen = QGuiApplication::primaryScreen();
  2. auto rect = ui->calendarWidget->rect();
  3. auto widgetScreenPic = screen->grabWindow(ui->calendarWidget->winId(), rect.x(), rect.y(), rect.width(), rect.height());
  4. widgetScreenPic = widgetScreenPic.scaled(QSize(rect.width(), rect.height()), Qt::KeepAspectRatio);
  5. widgetScreenPic.save("./widgetpicture.png");

 上面这种方式对造成我的布局显示有问题,改为在全屏上截取控件的范围

  1. QScreen *screen = QGuiApplication::primaryScreen();
  2. auto rect = ui->calendarWidget->rect();
  3. QPoint globalPos = ui->calendarWidget->mapToGlobal(QPoint(0, 0));
  4. //auto widgetScreenPic = screen->grabWindow(ui->calendarWidget->winId(), rect.x(), rect.y(), rect.width(), rect.height());
  5. auto widgetScreenPic = screen->grabWindow(0, globalPos.x(), globalPos.y(), rect.width(), rect.height());
  6. widgetScreenPic = widgetScreenPic.scaled(QSize(rect.width(), rect.height()), Qt::KeepAspectRatio);
  7. widgetScreenPic.save("./widgetpicture.png");

3.指定范围截屏:

实现:

  1. QPixmap p = this->grab(QRect(-20, -20, 200, 500));
  2. p.save("./Rectpicture.png","png");

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/805955
推荐阅读
相关标签
  

闽ICP备14008679号