c++ - 使用 Qt C++ 截屏
问题描述
我正在尝试用我的应用程序截取屏幕截图。但我收到以下错误消息:
QPixmap: Must construct a QGuiApplication before a QPixmap
我的程序在后台运行,我不需要 GUI。我将如何创建一个“QGuiApplication”然后永久隐藏窗口?还是有另一种无需创建 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);
解决方案
QGuiApplication
在创建. _ _ QPixmap
您不需要还创建 GUI。QGuiApplication
它本身不会创建任何窗口或任何可见的东西。
一个好的地方是在开始main()
:
int main(int argc, char* argv[])
{
QGuiApplication app(argc, argv);
// ...
它也适用于QApplication
,因为它继承自QGuiApplication
。它只是提供了创建基于对象所需的额外东西QWidget
,而您不需要这些东西。重要的是QGuiApplication
对象是在QPixmap
.
最后,您需要告诉grabWindow()
要抓取哪个部分。要抓取整个屏幕,请使用:
auto geom = screen->geometry();
qpx_pixmap = screen->grabWindow(0, geom.x(), geom.y(), geom.width(), geom.height());
推荐阅读
- sass - Azure Pipeline 中的 BuildWebCompiler 失败
- javascript - 排列数组值的优先级
- java - Java 8过滤器按方法流式返回列表
- gradle - IntelliJ 更新后无法解析符号“gradle”
- python - 向量化一个删除重复值的 iterrows 函数,只保留第一个
- neo4j - Neo4j:Cypher 查询以并行化先前查询的一行结果
- javascript - 放置在环上的 SVG 文本
- html - 如何使 tbody 垂直可滚动,整个表格可水平滚动?
- angular - TypeError:无法读取未定义的属性(读取“过滤器”)
- javascript - Javascript填充未排序列表自动滚动