抓下qml2的screen shot

stereoMatching 2013-06-13 11:04:49
过去的做法

http://www.developer.nokia.com/Community/Wiki/How_to_take_ScreenShot_Qt/QML

很遗憾,这招在qml2中是行不通的
我的试验

screenCapture.hpp

#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

#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

#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

import QtQuick 2.0

import "logic.js" as Logic
import "style.js" as Style

Rectangle{
id : root
width : 1024
height : 768

MouseArea{
anchors.fill: root

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

error messages

QPixmap::grabWidget is deprecated, use QWidget::grab() instead
QMetaObject::invokeMethod: No such method QQuickView::grab(QRect)
...全文
252 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
stereoMatching 2013-06-14
  • 打赏
  • 举报
回复
那个人回个帖吧,我好结帖
ppdayz 2013-06-14
  • 打赏
  • 举报
回复
感谢楼主分享
  • 打赏
  • 举报
回复
谢谢分享。。。
stereoMatching 2013-06-13
  • 打赏
  • 举报
回复
我找到解法了,相当简单 [code=c] void screenCapture::capture(QString const &path) const { QImage img = currentView_->grabWindow(); img.save(path); } [code]

16,816

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧