首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用ScreenShot Qt/QML

如何使用ScreenShot Qt/QML
EN

Stack Overflow用户
提问于 2013-06-13 22:44:19
回答 1查看 11.7K关注 0票数 7

我不能让它在QtQuick2上工作

screenCapture.hpp

代码语言:javascript
复制
#include <QObject>

class QString;
class QQuickView;

class screenCapture : public QObject
{
    Q_OBJECT
public:    
    explicit screenCapture(QQuickView *parent = 0);

public slots:
    void capture(QString const &path) const;

private:
    QQuickView *currentView_;    
};

screenCapture.cpp

代码语言:javascript
复制
#include <QPixmap>
#include <QQuickView>
#include <QString>

#include "screenCapture.hpp"

screenCapture::screenCapture(QQuickView *currentView) :
    QObject(0), currentView_(currentView)
{
}

void screenCapture::capture(QString const &path) const
{
    QPixmap::grabWidget(currentView_).save(path);
}

main.cpp

代码语言:javascript
复制
#include <QGuiApplication>
#include <QQuickPaintedItem>
#include <QQuickView>
#include <QQmlContext>

#include "screenCapture.hpp"

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

    qmlRegisterType<screenCapture>("Image", 1, 0, "ScreenCapture");
    qmlRegisterType<saveAbleImage>("Image", 1, 0, "SaveAbleImage");

    QQuickView view;
    view.setResizeMode(QQuickView::SizeRootObjectToView);
    view.setSource(QStringLiteral("/Users/Qt/program/experiment_apps_and_libs/funnyCamera/qml/funnyCamera/main.qml"));
    view.show();

    screenCapture screenClass(&view);
    view.rootContext()->setContextProperty("screenObject", &screenClass);

    return app.exec();
}

main.qml

代码语言:javascript
复制
import QtQuick 2.0

Rectangle{
    id : root
    width : 1024
    height : 768    

    MouseArea{
        anchors.fill: root

        onClicked: {          
            console.log("save image")
            screenObject.capture("Pictures/saveTest.jpg")
        }
    }
}

错误消息

QPixmap::grabWidget已弃用,请使用QWidget::grab()代替QMetaObject::invokeMethod:没有此类方法QQuickView::grab(QRect)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-13 23:57:11

我找到了一个非常简单的解决方案,将函数“capture”改为

代码语言:javascript
复制
void screenCapture::capture(QString const &path) const
{
    QImage img = currentView_->grabWindow();
    img.save(path);
}
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17090019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档