Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.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++ Qt5.5程序在使用QApplication::activeWindow时崩溃->;其他窗口中的winId()_C++_Qt - Fatal编程技术网

C++ Qt5.5程序在使用QApplication::activeWindow时崩溃->;其他窗口中的winId()

C++ Qt5.5程序在使用QApplication::activeWindow时崩溃->;其他窗口中的winId(),c++,qt,C++,Qt,我正在尝试实现当全局热键被激活时截图的功能。我将其应用到我的项目中,以便轻松创建全局热键 要使用screen->grabWindow(),我必须获取活动窗口的WinID。所以我找到了QApplication::activeWindow()->winId()并使用了它 QScreen *screen = QGuiApplication::primaryScreen(); QPixmap screenShot = screen->grabWindow(QApplication::activeW

我正在尝试实现当全局热键被激活时截图的功能。我将其应用到我的项目中,以便轻松创建全局热键

要使用screen->grabWindow(),我必须获取活动窗口的WinID。所以我找到了QApplication::activeWindow()->winId()并使用了它

QScreen *screen = QGuiApplication::primaryScreen();
QPixmap screenShot = screen->grabWindow(QApplication::activeWindow()->winId(), 0, 0, -1,-1);
然而,事情正朝着错误的方向发展。当我在其他窗口中按热键时,程序会崩溃并显示“untitled2.exe已停止工作”。(很抱歉,无法显示图像[])

我发现同样的情况也会发生,即使我只是简单地用qDebug()来解释它。不仅是winId(),还有windowTitle()、setWindowTitle()等等

qDebug() << QApplication::activeWindow()->winId();
qDebug()winId();

有人能帮我解决吗?非常感谢

它崩溃是因为
QApplication::activeWindow()
返回null。如果没有应用程序窗口具有焦点(这是文档中的逐字记录),它将这样做。没有具有焦点的应用程序窗口意味着没有一个应用程序窗口具有焦点


因此,这种方法根本不适用于您试图做的事情。您需要使用特定于平台的方法来执行此操作。

崩溃具体发生在哪里?试着连接一个调试器,告诉我们它说了什么。@Lukasboursma调试器说“劣质的停止是因为它收到了来自操作系统的信号。信号SIGSEGV name:signal Segmentation meaningfault:”这基本上就是说发生了崩溃。您正在使用哪个调试器?你能在你的源代码或Qt源代码中找到崩溃发生的确切位置吗?@LukasBoersma我想这就是我使用“QApplication::activeWindow()->winId()的地方。因为无论何时我使用它,它都会崩溃。调试器应该能够告诉您崩溃发生在Qt源的确切位置,以及窗口小部件的内部状态。如果没有这些信息,将很难帮助您,因为调用winId()是完全有效的,并且不会导致崩溃。如果尚未安装QtCreator,请尝试安装QtCreator并用它调试程序。在没有任何进一步信息的情况下,我只能猜测QApplication::activeWindow()可能为null。