我正在尝试实现全局热键激活时截图的功能。我将其应用到我的项目中,这样我就可以轻松创建全局热键。
要使用 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)
谁能帮我解决一下吗?多谢!
它崩溃是因为QApplication::activeWindow()返回 null。如果没有应用程序窗口具有焦点,它将这样做(这是文档中的逐字记录)。没有应用程序窗口具有焦点意味着您的应用程序窗口都没有焦点。
因此,这种方法根本不适合您尝试做的事情。您需要使用特定于平台的方法来执行此操作。
| 归档时间: |
|
| 查看次数: |
1239 次 |
| 最近记录: |