我正在尝试在应用程序中捕获应用程序的屏幕截图。它是一个基于Qt的应用程序。有人知道怎么做吗?任何建议都非常受欢迎。
CV
答案 0 :(得分:3)
您可以告诉任何QWidget
(包括您的QMainWindow
)在屏幕外呈现自己:
http://developer.qt.nokia.com/doc/qt-4.8/qwidget.html#render
从技术上讲,这不是截图,因为它为此目的明确呈现窗口小部件,而不是捕获屏幕上显示的内容。几乎任何目的都没关系。
如果您有一个GL小部件,您可以/必须使用grabFramebuffer(),它具有捕获屏幕上显示内容的优势。
答案 1 :(得分:3)
通过此示例,您可以获得所有小部件屏幕。 您可以根据需要将此方法附加到任何按键或信号,以获得连续的屏幕截图。
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++;
}
}
答案 2 :(得分:1)
如果您有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
答案 3 :(得分:1)
在现代QT 5+中,可以这样做:
void MainWindow::takeScreenshot(const QString screenshotFileName)
{
if(isActiveWindow())
{
auto grabbedScreenshot = QWidget::grab();
grabbedScreenshot.save(screenshotFileName);
}
}