在其他窗口中使用 QApplication::activeWindow->winId() 时,QT 5.5 程序崩溃

Inc*_*ink 4 c++ qt

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

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

QScreen *screen = QGuiApplication::primaryScreen();
QPixmap screenShot = screen->grabWindow(QApplication::activeWindow()->winId(), 0, 0, -1,-1);
Run Code Online (Sandbox Code Playgroud)

然而,事情正在朝着错误的方向发展。当我在其他窗口中按下热键时,程序崩溃并显示“untitled2.exe已停止工作”。(抱歉无法放置图像[ http://ww2.sinaimg.cn/large/bcbe8e8cgw1euarn4mcb6j20vt09ojtk。 ]

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

qDebug() << QApplication::activeWindow()->winId();
Run Code Online (Sandbox Code Playgroud)

谁能帮我解决一下吗?多谢!

Rei*_*ica 5

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

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