【问题标题】:screenshot of a qt application from inside the application来自应用程序内部的 qt 应用程序的屏幕截图
【发布时间】:2012-02-28 11:19:46
【问题描述】:

我正在尝试在应用程序中捕获我的应用程序的屏幕截图。它是一个基于 Qt 的应用程序。有谁知道如何做到这一点?非常欢迎任何建议。

简历

【问题讨论】:

  • “在应用程序中捕获我的应用程序的屏幕截图” - 无法抗拒!

标签: qt qt4 screenshot qwidget


【解决方案1】:

你可以告诉任何QWidget(包括你的QMainWindow)在屏幕外渲染自己: http://developer.qt.nokia.com/doc/qt-4.8/qwidget.html#render

从技术上讲,这不是屏幕截图,因为它为此目的明确地呈现小部件,而不是捕获屏幕上看到的内容。几乎任何目的都无关紧要。

如果您有一个 GL 小部件,您可以/必须改为使用 grabFramebuffer(),它具有捕获屏幕上所见内容的优势。

【讨论】:

    【解决方案2】:

    通过这个示例,您可以获得所有小部件屏幕。 您可以根据自己的喜好将此方法附加到任何按键或信号上,以获取连续的屏幕截图。

    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++;
        }
    }
    

    【讨论】:

      【解决方案3】:

      如果您有 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

      【讨论】:

        【解决方案4】:

        在现代 QT 5+ 中可以这样做:

        void MainWindow::takeScreenshot(const QString screenshotFileName)
        {
            if(isActiveWindow())
            {
                auto grabbedScreenshot = QWidget::grab();
                grabbedScreenshot.save(screenshotFileName);
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-02-18
          • 2017-02-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多