[Qt-qml] QDeclarativePropertyMap: bug or mistake?

23 views
Skip to first unread message

Sven Anderson

unread,
Feb 14, 2012, 8:49:40 AM2/14/12
to qt-...@qt.nokia.com
Hi,

I'm using QDeclarativePropertyMap in my C++ extension, and I am
experiencing some binding proplems depending on the order of the items
in my QML file. The following test code produces a window with the text
"before.map.key1 = XXX, after.map.key4 = undefined", although the only
difference between the "before" and "after" item is their relative
position to the text item. Also any updates on the map work only on the
"before" item. I think this is a bug, but maybe I did a mistake, that I
don't see. (The problem is not, that the map property is a (QObject *)
instead of a (QDeclarativePropertyMap *), or that it is CONSTANT without
NOTIFY, I tried that already.)

Here is the code:
( alternatively here: http://pastebin.com/zZChEzBj )

#include <QtGui/QApplication>
#include <QtDeclarative>
#include <QDeclarativePropertyMap>
#include "qmlapplicationviewer.h"


class MyItem : public QObject {
Q_OBJECT
Q_PROPERTY(QStringList keys READ Keys WRITE SetKeys)
Q_PROPERTY(QObject *map READ Map CONSTANT)
public:
MyItem(QObject *parent = 0) : QObject(parent) {}

QStringList Keys() const { return map_.keys(); }
QDeclarativePropertyMap *Map() { return &map_; }

void SetKeys(const QStringList &keys) {
Q_FOREACH(QString key, keys) {
if (!map_.contains(key)) {
map_.insert(key, QVariant(QString("XXX")));
}
}
}
private:
QDeclarativePropertyMap map_;
};


int main(int argc, char *argv[])
{
QApplication app(argc, argv);

QmlApplicationViewer viewer;
qmlRegisterType<MyItem>("Test", 1, 0, "MyItem");

viewer.setMainQmlFile(QLatin1String("qml/qmltest2/main.qml"));
viewer.showExpanded();

return app.exec();
}

#include "main.moc"

-------------------------------------------------------------------------------------------


import QtQuick 1.0
import Test 1.0

Rectangle {
width: 400
height: 200

MyItem {
id: before
keys: ["key1", "key2", "key3"]
Component.onCompleted: console.log("before item completed: " + keys)
}

Text {
text: "before.map.key1 = " + before.map.key1 + ", after.map.key4
= " + after.map.key4
anchors.centerIn: parent
}

MyItem {
id: after
keys: ["key4", "key5", "key6"]
Component.onCompleted: console.log("after item completed: " + keys)
}
}
_______________________________________________
Qt-qml mailing list
Qt-...@qt.nokia.com
http://lists.qt.nokia.com/mailman/listinfo/qt-qml

Sven Anderson

unread,
Feb 24, 2012, 6:23:53 AM2/24/12
to qt-...@qt.nokia.com
Hi,

since nobody answered, I filed a bug now:
https://bugreports.qt-project.org/browse/QTBUG-24495


Regards

Sven

--
Dr. Sven Anderson
|-- Software Development --|
snom technology AG
tel: +49 30 39833 - 451
fax: +49 30 39833 - 111

________________________________

* Join our Partner program: http://www.snom.com/partner<http://www.snom.com/partners>
* Subscribe to our snom support RSS Feed<http://wiki.snom.com/wiki/index.php?title=RSS&action=feed&feed=rss> and get first-hand technical news about snom products, e.g. Firmware updates, FAQ updates, troubleshooting hints, etc.

Follow us on Facebook<http://www.facebook.com/snom.VoIP.phones>, Twitter<http://twitter.com/snom>, YouTube<http://www.youtube.com/user/snomvoip>, Linkedin<http://www.linkedin.com/groups?gid=1773766>


Sitz/Domicile: Charlottenstr. 68-71, 10117 Berlin, Germany
Handelsregistereintrag/Register of Corporations entry: Berlin-Charlottenburg HRB 61842 B
Vorstand/Executive Board: Dr. Christian Stredicke, Dr. Michael Knieling, Alexander Khan
Vorsitzender des Aufsichtsrates/Chairman of the Supervisory Board: Stefan Friese

snom technology AG<http://www.snom.com>

Reply all
Reply to author
Forward
0 new messages