4
0
mirror of https://github.com/QuasarApp/QtAndroidTools.git synced 2025-04-29 22:44:31 +00:00

Added a general purpose bytearray to image provider for show image inside qml code

This commit is contained in:
FalsinSoft 2020-02-13 14:59:36 +01:00
parent dc51d9387e
commit 09e74c3559
2 changed files with 87 additions and 4 deletions

@ -72,12 +72,49 @@
#endif
#include "QtAndroidTools.h"
QtAndroidTools *QtAndroidTools::m_pInstance = nullptr;
QtAndroidTools::QtAndroidTools()
{
m_pInstance = this;
}
QObject* QtAndroidTools::qmlInstance(QQmlEngine *engine, QJSEngine *scriptEngine)
{
Q_UNUSED(engine);
Q_UNUSED(scriptEngine);
QtAndroidTools *pAndroidTools = new QtAndroidTools();
engine->addImageProvider("QtAndroidTools", new PhotoImageProvider(&pAndroidTools->m_PhotoMap));
return pAndroidTools;
}
QtAndroidTools* QtAndroidTools::instance()
{
return m_pInstance;
}
bool QtAndroidTools::insertImage(const QString &Name, const QByteArray &Data)
{
QPixmap DataImage;
if(DataImage.loadFromData(Data) == true)
{
m_PhotoMap.insert(Name, DataImage);
return true;
}
return false;
}
bool QtAndroidTools::removeImage(const QString &Name)
{
return (m_PhotoMap.remove(Name) > 0) ? true : false;
}
void QtAndroidTools::InitializeQmlTools()
{
qmlRegisterSingletonType<QtAndroidTools>("QtAndroidTools", 1, 0, "QtAndroidTools", &QtAndroidTools::qmlInstance);
#ifdef QTAT_APP_PERMISSIONS
qmlRegisterSingletonType<QAndroidAppPermissions>("QtAndroidTools", 1, 0, "QtAndroidAppPermissions", &QAndroidAppPermissions::qmlInstance);
#endif

@ -23,10 +23,56 @@
*/
#pragma once
class QtAndroidTools
{
public:
explicit QtAndroidTools();
#include <QQuickImageProvider>
#include <QtAndroidExtras>
#include <QQmlEngine>
#include <QPixmap>
#include <QImage>
class QtAndroidTools : public QObject
{
Q_DISABLE_COPY(QtAndroidTools)
Q_OBJECT
class PhotoImageProvider : public QQuickImageProvider
{
public:
PhotoImageProvider(QMap<QString, QPixmap> *pPhotoMap) : QQuickImageProvider(QQuickImageProvider::Pixmap), m_pPhotoMap(pPhotoMap) {}
QPixmap requestPixmap(const QString &id, QSize *size, const QSize &requestedSize)
{
QMap<QString, QPixmap>::const_iterator PhotoIterator = m_pPhotoMap->find(id);
if(PhotoIterator != m_pPhotoMap->constEnd())
{
const QPixmap Photo = PhotoIterator.value();
if(size) *size = Photo.size();
if(requestedSize.width() > 0 && requestedSize.height() > 0)
return Photo.scaled(requestedSize);
else
return Photo;
}
return QPixmap();
}
private:
const QMap<QString, QPixmap> *const m_pPhotoMap;
};
QtAndroidTools();
public:
static QObject* qmlInstance(QQmlEngine *engine, QJSEngine *scriptEngine);
static QtAndroidTools* instance();
static void InitializeQmlTools();
Q_INVOKABLE bool insertImage(const QString &Name, const QByteArray &Data);
Q_INVOKABLE bool removeImage(const QString &Name);
private:
static QtAndroidTools *m_pInstance;
QMap<QString, QPixmap> m_PhotoMap;
};