在Android上使用Qt C ++截图

时间:2015-12-08 18:06:05

标签: android c++ qt screenshot

感谢您查看我的问题!

我目前正在使用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会成为正确的轨道?任何帮助都非常感谢!

2 个答案:

答案 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::renderQt Doc):

QPixmap pixmap(widget->size());
widget->render(&pixmap);

如果要为应用程序以外的其他应用程序/窗口小部件截屏,则应使用Android API ...