【发布时间】:2012-02-28 11:19:46
【问题描述】:
我正在尝试在应用程序中捕获我的应用程序的屏幕截图。它是一个基于 Qt 的应用程序。有谁知道如何做到这一点?非常欢迎任何建议。
简历
【问题讨论】:
-
“在应用程序中捕获我的应用程序的屏幕截图” - 无法抗拒!
标签: qt qt4 screenshot qwidget
我正在尝试在应用程序中捕获我的应用程序的屏幕截图。它是一个基于 Qt 的应用程序。有谁知道如何做到这一点?非常欢迎任何建议。
简历
【问题讨论】:
标签: qt qt4 screenshot qwidget
你可以告诉任何QWidget(包括你的QMainWindow)在屏幕外渲染自己:
http://developer.qt.nokia.com/doc/qt-4.8/qwidget.html#render
从技术上讲,这不是屏幕截图,因为它为此目的明确地呈现小部件,而不是捕获屏幕上看到的内容。几乎任何目的都无关紧要。
如果您有一个 GL 小部件,您可以/必须改为使用 grabFramebuffer(),它具有捕获屏幕上所见内容的优势。
【讨论】:
通过这个示例,您可以获得所有小部件屏幕。 您可以根据自己的喜好将此方法附加到任何按键或信号上,以获取连续的屏幕截图。
MyClass::screenshot()
{
QWidget *w = QApplication::activeWindow();
if(w) {
static int count = 0;
QPixmap p = QPixmap::grabWidget(w);
p.save(QString("/your/path/screenshot%1.png").arg(count));
count++;
}
}
【讨论】:
如果您有 ID,QPixmap 可以让您进行窗口抓取。我的参考是针对 PyQt,但我相信您可以进行调整:
How to get RGB values of QPixmap or QImage pixel - Qt, PyQt
http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qpixmap.html#grabWindow
【讨论】:
在现代 QT 5+ 中可以这样做:
void MainWindow::takeScreenshot(const QString screenshotFileName)
{
if(isActiveWindow())
{
auto grabbedScreenshot = QWidget::grab();
grabbedScreenshot.save(screenshotFileName);
}
}
【讨论】: