C++ 使用Qt C+拍摄屏幕截图+;

C++ 使用Qt C+拍摄屏幕截图+;,c++,qt,screenshot,C++,Qt,Screenshot,我正试图用我的应用程序截图。但我收到以下错误消息: QPixmap: Must construct a QGuiApplication before a QPixmap 我的程序在后台运行,我不需要GUI。如何创建“QGUI应用程序”,然后永久隐藏窗口?或者有没有另一种不用创建GUI的截图方法 我使用以下代码截图: QScreen *screen; QPixmap qpx_pixmap; screen = QGuiApplication::primaryScreen(); qpx_pixma

我正试图用我的应用程序截图。但我收到以下错误消息:

QPixmap: Must construct a QGuiApplication before a QPixmap
我的程序在后台运行,我不需要GUI。如何创建“QGUI应用程序”,然后永久隐藏窗口?或者有没有另一种不用创建GUI的截图方法

我使用以下代码截图:

QScreen *screen;
QPixmap qpx_pixmap;

screen = QGuiApplication::primaryScreen();
qpx_pixmap = screen->grabWindow(0);
screenshotTarget = dir.path() + "/" + QDateTime::currentDateTime().toString("dddd hh:mm:ss");
qpx_pixmap.save(screenshotTarget);

在创建
QPixmap
之前,在启动时创建
QGuiApplication
的实例。您不需要同时创建GUI<代码>QGUI应用程序本身不会创建任何窗口或任何可见的内容

main()
的开头有一个很好的位置:

它还可用于
QApplication
,因为它继承自
QGuiApplication
。它只提供了创建基于
QWidget
的对象所需的额外内容,而您不需要这些内容。重要的是
QGuiApplication
对象是在
QPixmap
之前创建的

最后,您需要告诉
grabWindow()
要抓取哪个部分。要抓取整个屏幕,请使用:

auto geom = screen->geometry();
qpx_pixmap = screen->grabWindow(0, geom.x(), geom.y(), geom.width(), geom.height());

我的程序使用QGUI应用程序运行,而不是我以前使用的QApplication。所以它起作用了。我的截图没有截图,但我会调试它。Thanks@pHeoz它还可用于
QApplication
,因为它继承自
QGuiApplication
。它只提供了创建基于
QWidget
的对象所需的额外内容,在您的案例中不需要这些内容。错误消息表明您创建pixmap对象太早。您需要在
QGuiApplication
对象之后创建它。@pHeoz更新了答案。您还需要告诉
grabWindow
要获取的窗口部分。@您的编译器不支持C++11吗?我真的建议你更新。或者在项目文件中添加
CONFIG+=c++11
,以防编译器支持它,但您的Qt版本是旧的。不管怎样,看看它告诉你类型是
QRect
。我让它工作了,谢谢。我正在使用QtCreator3.6.1。我很久以前就把它安装在我的机器上了。但是我认为CONFIG+=c++11应该可以工作。我最终还是使用了QRect。
auto geom = screen->geometry();
qpx_pixmap = screen->grabWindow(0, geom.x(), geom.y(), geom.width(), geom.height());