感谢您查看我的问题!
我目前正在使用Qt C ++开发一个项目,该项目旨在实现多平台。我有点喜欢它,所以我被要求设置从菜单结构中截取屏幕截图的能力,而且我的配套应用程序的Android版本存在问题。
作为一个快速概述,它是一个软件将主机PC屏幕的内容发送到我们的应用程序,我已经能够使用QScreen和QPixmap在Windows版本上截取屏幕截图,如下所示:
overlaywindow.cpp
{
QPixmap screenSnapData = screenGrab->currentBackground();
}
screenGrabber.cpp
{
QScreen *screen = QGuiApplication::primaryScreen();
return screen->grabWindow( QApplication::desktop()->winId() );
}
不幸的是,Android似乎拒绝使用QScreen,而且过去谷歌搜索中的大多数建议显示现在已弃用的QPixmap :: grab(),我已经陷入了困境。
我拥有的运气在菜单本身和QWidget的代码中,但当然不是没有问题!
QFile doubleCheckFile("/storage/emulated/0/Pictures/Testing/checking.png");
doubleCheckFile.open(QIODevice::ReadWrite);
QPixmap checkingPixmap = QWidget::grab();
checkingPixmap.save(&doubleCheckFile);
doubleCheckFile.close();
此代码确实采用屏幕截图,但仅限于当前实现的按钮条,而不是整个屏幕。我还使用以下方法拍摄了一个带有屏幕尺寸的白色框的“屏幕截图”:
QDesktopWidget dw;
QWidget *screen=dw.screen();
QPixmap checkingPixmap = screen->grab();
是否有人知道是否有替代方法可以使用QScreen在Android中截取屏幕截图,或者与Windows相比是否有特定的方式使其运行?或者QWidget会成为正确的轨道?任何帮助都非常感谢!
答案 0 :(得分:2)
我可以在Qt doc中阅读:在你的screenGrabber.cpp中:
QScreen *screen = QGuiApplication::primaryScreen();
return screen->grabWindow( QApplication::desktop()->winId() );
替换为:
QScreen *screen = QGuiApplication::primaryScreen();
return screen->grabWindow( 0 ); // as 0 is the id of main screen
答案 1 :(得分:0)
如果要为自己的窗口小部件截屏,可以使用方法QWidget::render
(Qt Doc):
QPixmap pixmap(widget->size());
widget->render(&pixmap);
如果要为应用程序以外的其他应用程序/窗口小部件截屏,则应使用Android API ...