Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 没有计时器的Qt屏幕截图示例_C++_Qt_X11 - Fatal编程技术网

C++ 没有计时器的Qt屏幕截图示例

C++ 没有计时器的Qt屏幕截图示例,c++,qt,x11,C++,Qt,X11,Qt在截图之前使用计时器。是否可以编辑示例,以便在最终屏幕截图中主窗口不可见的情况下,屏幕截图立即启动(选中“隐藏此窗口”) 我的尝试没有成功。我试过: setVisible(false); qApp->processEvents(); qApp->sendPostedEvents(); qApp->flush(); QMetaObject::invokeMethod(this, "shootScreenshot", Qt::QueuedConnection); 尽管隐藏了窗

Qt在截图之前使用计时器。是否可以编辑示例,以便在最终屏幕截图中主窗口不可见的情况下,屏幕截图立即启动(选中“隐藏此窗口”)

我的尝试没有成功。我试过:

setVisible(false);
qApp->processEvents();
qApp->sendPostedEvents();
qApp->flush();
QMetaObject::invokeMethod(this, "shootScreenshot", Qt::QueuedConnection);
尽管隐藏了窗口并处理了所有可能的事件,但在最终屏幕截图中主窗口仍然可见


有什么办法吗?为什么会发生这种情况?

您的代码片段提出的问题远远多于它的答案。为什么要手动旋转事件循环?为什么要使用QMetaObject::invokeMethod()调用方法?“shootScreenshot”方法是否存在?如果存在,它是在哪里定义的?如果没有计时器,您将处于一种竞争状态,具有更新调用和重新绘制,以及Qt将从图形缓冲区中提取什么。只需做一个100毫秒的小更新定时器,同时播放一个声音。如果你看看其他很多屏幕截图工具是如何工作的,它们使用相同的技术,让你觉得它比现在快。你的另一个选择是使用全局键盘快捷键或其他方式,而不是单击窗口。我认为问题在于,似乎有更多的参与方。即使您隐藏了窗口,并确保如果Qt处理了所有事件,X服务器可能还没有隐藏它,即使它隐藏了,窗口下的窗口可能还没有重新绘制自己。您可能不仅需要等待应用程序处理其事件,还需要等待X server和其他客户端。您是否尝试了setHidden(true)方法而不是setVisible?我正在旋转事件,希望能够重新绘制。我已经查看了Qt源代码,setHidden只是执行setVisible(!bool)。单击窗口是我所需要的——我修改的示例允许用户选择屏幕的一个区域。是否有任何X11代码可能会有所帮助?