应用程序内部的qt应用程序的屏幕截图

时间:2012-02-07 00:18:05

标签: qt qt4 screenshot qwidget

我正在尝试在应用程序中捕获应用程序的屏幕截图。它是一个基于Qt的应用程序。有人知道怎么做吗?任何建议都非常受欢迎。

CV

4 个答案:

答案 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);
    }
}