我试图实现在激活全局热键时截取屏幕截图的功能。我将this应用到我的项目中,这样我就可以轻松创建全局热键。
要使用screen-> grabWindow(),我必须获取活动窗口的WinID。所以我找到了QApplication :: activeWindow() - > winId(),然后使用它。
QScreen *screen = QGuiApplication::primaryScreen();
QPixmap screenShot = screen->grabWindow(QApplication::activeWindow()->winId(), 0, 0, -1,-1);
然而,事情是错误的。当我在其他窗口中按热键时,程序只是崩溃了" untitled2.exe已停止工作"。(抱歉无法放置图像[http://ww2.sinaimg.cn/large/bcbe8e8cgw1euarn4mcb6j20vt09ojtk.jpg])
我发现即使我只是qDebug()它也会发生同样的情况。不仅是winId(),还有windowTitle(),setWindowTitle()等等。
qDebug() << QApplication::activeWindow()->winId();
任何人都可以帮我解决这个问题吗?非常感谢!
答案 0 :(得分:2)
崩溃是因为QApplication::activeWindow()
返回null。如果没有应用程序窗口具有焦点,它将这样做(这是文档中的逐字记录)。没有具有焦点的应用程序窗口意味着您的应用程序窗口都没有焦点。
所以,这种方法根本不会为你尝试做的事情而工作。您需要使用特定于平台的方法来执行此操作。