在写qml程序的时候,遇到了需要截图的功能,
下面来看看怎么获取控件的截图
首先,所有的可视控件其实都继承了QQuickItem这个类的
所以所有控件都有截图的功能,当然这个只能在c++里实现
首先,定义一个截图类继承public QObject,
#include <QQuickItem>
#include <QQuickItemGrabResult>
要用到上面两个头文件
两个私有变量
QQuickItem *m_grab_item;
QSharedPointer<QQuickItemGrabResult> m_grab_result;
定义这样一个函数,Q_INVOKABLE void setItem(QObject *itemObj); // 保存图片
下面是它的实现,
void qjsontest::setItem(QObject *itemObj)
{
m_grab_item = qobject_cast<QQuickItem*>(itemObj);//获取控件id
m_grab_result = m_grab_item->grabToImage();//获取控件图片
QQuickItemGrabResult * grabResult = m_grab_result.data();//获取数据
connect(grabResult,SIGNAL(ready()),this,SLOT(saveimage()));//这里是必须这样写的,因为调用了ready()这个准备函数,里面做了很多处理
//信号连接
}
定义一个槽函数
private slots:void saveimage();下面是它的实现void qjsontest::saveimage(){
QImage img = m_grab_result->image();//这里转成图片qDebug()<<img;if(img.save("C:\\Users\\Administrator\\Desktop\\assssa.jpg")){qDebug("ddd");}}
qml中使用如下:onClicked: capIol_vm.setItem(idItem);//idItem是控件id下面贴出完整代码:..h文件#ifndef QJSONTEST_H #define QJSONTEST_H #include <QObject> #include <QJsonDocument> #include <qDebug> #include <QJsonObject> #include <QByteArray> #include <QJsonArray> #include <QQuickItem> #include <QQuickItemGrabResult> #include <QString> #include <qjsonvalue.h> #include <qjsondocument.h> class qjsontest:public QObject { Q_OBJECT public: qjsontest(); ~qjsontest(); Q_INVOKABLE void setItem(QObject *itemObj); // 保存图片 private slots: void saveimage(); private: QQuickItem *m_grab_item; QSharedPointer<QQuickItemGrabResult> m_grab_result; }; #endif // QJSONTEST_H
.cpp文件
#include "qjsontest.h"
#include<QDebug>
#include<QFile>
qjsontest::qjsontest()
{
}
qjsontest::~qjsontest()
{
}
void qjsontest::setItem(QObject *itemObj)
{
m_grab_item = qobject_cast<QQuickItem*>(itemObj);
m_grab_result = m_grab_item->grabToImage();
QQuickItemGrabResult * grabResult = m_grab_result.data();
connect(grabResult,SIGNAL(ready()),this,SLOT(saveimage()));
}
void qjsontest::saveimage()
{
QImage img = m_grab_result->image();
qDebug()<<img;
if(img.save("C:\\Users\\Administrator\\Desktop\\assssa.jpg")){
qDebug("ddd");
}
}
qml;文件
import QtQuick 2.7
import QtQuick.Controls 1.5
ApplicationWindow {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
id:root
Item{ id: idItem
width: 200
height: 200
x:1; y:1;
clip: true;
Rectangle{
width: 200
height: 200
color:"red"
Button {
x:5
y:5
width: 64
height: 48
text: qsTr("calc")
}
}
}
Button {
x:300
y:100
width: 64
height: 48
text: qsTr("normal")
onClicked: capIol_vm.setItem(idItem);
}
}