android - 在 Android 上使用 Qt C++ 截取屏幕截图

标签 android c++ qt screenshot

感谢您检查我的问题!

我目前正在使用 Qt C++ 开发一个项目,该项目旨在支持多平台。我是它的新手,所以我被要求设置从菜单结构中截取屏幕截图的功能,我在使用 Android 版本的配套应用时遇到了问题。

作为一个快速概述,它是一个将主机 PC 屏幕的内容发送到我们的应用程序的软件,我已经能够使用 QScreen 和 QPixmap 在 Windows 版本上截取屏幕截图,如下所示:

覆盖窗口.cpp

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

屏幕抓取器.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();

谁知道在 Android 中是否有使用 QScreen 截取屏幕截图的替代方法,或者与 Windows 相比是否有特定的方法让它工作?或者 QWidget 会是正确的轨道吗?非常感谢任何帮助!

最佳答案

正如我在 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

关于android - 在 Android 上使用 Qt C++ 截取屏幕截图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34162908/

相关文章:

android - 使用数据绑定(bind)添加 BottomNavigationView 的点击监听器

c++ - 动态地形 block 生成

qt - 如何在qt creator中设置源文件的默认文件编码?

c++ - 我可以为QPixmap派生类嵌入缩放方法吗?

c++ - Qt访问不同类的ui

c++ - QT - 顶部窗口

iPhone 应用程序端口到 Palm Pre 或 Android?

java - FloatingActionButton 在 KitKat 上不显示

javascript - AddEventListener 在浏览器上有效,但在 Android 上无效

c++ - 在哪里实现容忍度来决定何时在 Qt 中检测触摸屏按下事件和移动事件?