C++绘制QML图像
原创
©著作权归作者所有:来自51CTO博客作者编程汇也的原创作品,请联系作者获取转载授权,否则将追究法律责任
#ifndef CUSTIMAGE_H
#define CUSTIMAGE_H
#include <QObject>
#include <QQuickPaintedItem>
#include <QPainter>
#include <QImage>
//继承自基于QML可绘制项
class CustImage : public QQuickPaintedItem
{
Q_OBJECT
public:
//构造
CustImage(QQuickItem *parent = 0);
//析构
~CustImage();
//单例
static CustImage *getInst();
//更新图像
void UpdateImage(QImage _image);
//QML调用函数
//初始化
Q_INVOKABLE void init();
//清空图像
Q_INVOKABLE void clear();
public:
//接口重写
void paint(QPainter *painter);
signals:
private slots:
private:
QImage m_baseImage{nullptr};//图像对象
int m_Width{1920};
int m_Height{1080};
};
#endif // CUSTIMAGE_H
#include "custimage.h"
//全局对象
static CustImage *_inst;
//构造
CustImage::CustImage(QQuickItem *parent) : QQuickPaintedItem(parent)
{
_inst = this;
init();
}
//析构
CustImage::~CustImage()
{
}
//单例
CustImage *CustImage::getInst()
{
if(nullptr==_inst){
_inst = new CustImage;
}
return _inst;
}
//更新图像
void CustImage::UpdateImage(QImage _image)
{
this->m_baseImage = _image;
update();
}
//初始化
void CustImage::init()
{
m_baseImage = QImage(m_Width,m_Height,QImage::Format_ARGB32);
if(this->m_baseImage.load(":/test.jpg")){
update();
}else{
m_baseImage.fill(Qt::black);
}
}
//清空图像
void CustImage::clear()
{
this->init();
}
//绘制图像
void CustImage::paint(QPainter *painter)
{
painter->drawImage(
QRectF(0,0,m_baseImage.width()*0.5,m_baseImage.width()*0.5),//绘制区域
m_baseImage.copy()); //图像
}
import QtQuick 2.15
import QtQuick.Window 2.15
import CppImage.CustImage 1.0
Window {
width: 640
height: 480
visible: true
title: qsTr("CustImage Draw From CPP")
Rectangle{
anchors.fill: parent
color:"red"
Rectangle{
anchors.centerIn: parent
color: "blue"
width: parent.width*0.9
height: parent.height*0.9
CustImage{
id:custImg
anchors.centerIn: parent
width: parent.width*0.9
height: parent.height*0.9
}
}
}
}