在安卓设备上使用Qt C++进行截屏

4

感谢查看我的问题!

我目前正在使用Qt C++开发一个跨平台项目。由于我是新手,所以被要求设置从菜单结构中获取屏幕截图的功能。但我在伴侣应用程序的Android版本上遇到了问题。

简单来说,这是一款软件,它将主机PC屏幕的内容发送到我们的应用程序,我已经能够在Windows版本上使用QScreen和QPixmap轻松地获取屏幕截图,如下所示:

overlaywindow.cpp

{
    QPixmap screenSnapData = screenGrab->currentBackground();
}

screenGrabber.cpp

{
    QScreen *screen = QGuiApplication::primaryScreen();
    return screen->grabWindow( QApplication::desktop()->winId() );
}

不幸的是,Android似乎拒绝使用QScreen,并且大多数从过去的Google搜索中得出的建议都指向了现在已弃用的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是正确的轨迹?非常感谢任何帮助!

3个回答

2
据我所读的Qt文档,在您的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

不幸的是,这对于Android版本不起作用,因为它仍在使用QScreen,正如以下编译器错误所示: 无法将“QScreen :: grabWindow(WId,int,int,int,int)(0u,0,0,-1,-1)”从“QPixmap”转换为“QScreen” 返回screen->grabWindow(0); - irrevilent

0

我今天在做这个示例时注意到安卓版本无法正常工作。我需要将我的应用程序与另一个应用程序进行分屏显示,然后拍摄整个屏幕快照,以便我可以解析另一个窗口中的数据供我的应用程序使用。这是一个糖尿病应用程序,我需要从My Fitness Pal获取数据并导入到我的应用程序中。我的应用程序分屏显示。这样不好。我可以调用安卓版本的屏幕截图功能,但我主要使用Qt,而不是试图引入Java。


嗨Chris!欢迎来到SO并感谢你的贡献。不过,我不明白你的回答如何与问题相符。请编辑你的回答。 - Stefan Bollmann
1
当前的回答表达不清楚。请编辑以添加更多细节,帮助他人理解如何回答所提出的问题。您可以在帮助中心找到关于如何撰写良好答案的更多信息。 - Community
实际上,我并不是回答这个问题,而是在补充一些内容。我想在Android上进行整个屏幕截图,但Qt的“示例”无法正常工作。 - Chris Sparks

0

如果你想截取自己的小部件屏幕截图,可以使用方法QWidget::renderQt Doc):

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

如果您想截取其他应用程序/小部件的屏幕截图,您应该使用Android API...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接