I'm working on a qml plugin in which I register a QObject-derived type for use 
within qml. I've set the default property on this item to be a 
QQmlListProperty<(other qobject derived type)>, and I've setup a READ function 
for this property. For some reason the qml engine will not load my application, 
complaining that this default property is read-only. 

I understand you typically have to define a WRITE function in order to make 
properties writeable from qml, but the example that comes with Qt regarding 
default properties does not do this, and it compiles fine:
http://qt-project.org/doc/qt-5/qtqml-referenceexamples-default-example.html

Here's the class definition I'm using:

class DefaultContent : public QObject
{
    Q_OBJECT

    Q_PROPERTY(QQmlListProperty<ShareableItem> attachments READ attachments)
    Q_CLASSINFO("DefaultProperty", "attachments")

public:
    explicit DefaultContent(QObject* parent = 0);

    QQmlListProperty<ShareableItem> attachments();

signals:

public slots:

private:
    QList<ShareableItem*> m_attachments;

};

And the qml...

import QtQuick.2.2
import QtQuick.Window 2.1
import Qtino.SharingKit 1.0     //This is my plugin that registers 
'DefaultContent'

Window {
    DefaultContent {
        id: defaultContentItem
        ImageItem { source: rootScreenGrab.url }
    }
}

The error I get is "Invalid property assignment: "attachments" is a read-only 
property"

Am I doing something obviously wrong here? If I absolutely must have a WRITE 
method on this property, how would that work with a QQmlListProperty type if 
the backing model is a QList? Would the list be owned by js or cpp? And how is 
that the provided Qt example can work without a WRITE method?

Any help would be much appreciated,
Brian


_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest

Reply via email to