Hi all,

I've been having a lot of trouble using QDeclarativeImageProvider in
my program. I've tried to follow the example given in the
documentation as close as possible... unfortunately I consistently get
a "QML Image: Failed to get image from provider:
image://imageproviderid/someimg" error. It's difficult to debug this
-- all I know is that my QDeclarativeImageProvider's "requestImage"
function never gets called when this error is thrown.

I've described how I'm using QDeclarativeImageProvider, and provided
my inherited class as well. I've been stuck on this problem for awhile
now and I'd really appreciate any help with this.

-Pris

// ========================================================================== //
//QDeclarativeImageProvider inherited class
#include "qmlimgprovider.h"

QmlImgProvider::QmlImgProvider() :
    QDeclarativeImageProvider(QDeclarativeImageProvider::Image)
{ }

QImage QmlImgProvider::requestImage(const QString &id, QSize *size,
const QSize &requestedSize)
{
    QImage myImage;
    qDebug() << "HELLO";  // never gets called!

    if (!m_image->isNull())
    {   // album art
        if(requestedSize.isValid())  // scale image if size is valid
        {  myImage = m_image->scaled(requestedSize, Qt::KeepAspectRatio);  }

        else  // leave same scale (want to create copy regardless)
        {  myImage = m_image->scaled(m_image->size());  }
    }
    else
    {   // default art
        if(requestedSize.isValid())  // scale image if size is valid
        {  myImage = m_default_image->scaled(requestedSize,
Qt::KeepAspectRatio);  }

        else  // leave same scale (want to create copy regardless)
        {  myImage = m_default_image->scaled(m_default_image->size());  }
    }

    // set size for qml (if needed)
    *size = myImage.size();
    return myImage;
}

void QmlImgProvider::SetImage(QImage* myImage)
{  m_image = myImage;  }

void QmlImgProvider::SetDefaultImage(QImage* myDefImage)
{  m_default_image = myDefImage;  }

// ========================================================================== //
// setup
QDeclarativeEngine* qmlEngine = m_view_context->engine();
qmlEngine->addImageProvider("ImageProviderID", new QmlImgProvider());
m_view->show();

// some time later
m_img_provider = qmlEngine->imageProvider("ImageProviderID");
m_img_provider->SetImage(m_valid_qimage);

// ========================================================================== //
// QML call (occurs AFTER the images have been set)
Image
                    {
                        height: parent.width;
                        width: parent.width;
                        fillMode: Image.PreserveAspectCrop;
                        source: "image://ImageProviderID/someImage";
                        anchors.verticalCenter: parent.verticalCenter;
                        clip:true;
                    }
_______________________________________________
Qt-qml mailing list
[email protected]
http://lists.qt.nokia.com/mailman/listinfo/qt-qml

Reply via email to