снимок экрана приложения qt из приложения - PullRequest
4 голосов
/ 07 февраля 2012

Я пытаюсь сделать снимок экрана моего приложения в приложении.Это приложение на основе Qt.Кто-нибудь знает, как это сделать?Любые предложения приветствуются.

CV

Ответы [ 4 ]

3 голосов
/ 07 февраля 2012

В этом примере вы можете получить весь экран вашего виджета. Вы можете прикрепить этот метод к любому нажатию клавиши или сигналу, если хотите, чтобы получить последовательный снимок экрана.

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 голосов
/ 07 февраля 2012

Вы можете указать любому QWidget (включая ваш QMainWindow), что он будет отображаться вне экрана: http://developer.qt.nokia.com/doc/qt-4.8/qwidget.html#render

Технически это не скриншот, так как он явно отображает виджет для этой цели вместо того, чтобы захватывать то, что видно на экране. Для почти любой цели это не имеет значения.

Если у вас есть виджет GL, вы можете / должны вместо этого использовать grabFramebuffer (), который имеет преимущество в захвате того, что видно на экране.

1 голос
/ 12 апреля 2018

В современном QT 5+ это можно сделать так:

void MainWindow::takeScreenshot(const QString screenshotFileName)
{
    if(isActiveWindow())
    {
        auto grabbedScreenshot = QWidget::grab();
        grabbedScreenshot.save(screenshotFileName);
    }
}
1 голос
/ 07 февраля 2012

QPixmap позволяет вам захватить окно, если у вас есть идентификатор.Мои ссылки на PyQt, но я уверен, что вы можете внести коррективы:

Как получить значения RGB QPixmap или пикселя QImage - Qt, PyQt

http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qpixmap.html#grabWindow

...