Hi Aaron,

In what way are Qt dynamic properties at in conflict with QML design goals?

QML appears to be a dynamic language. It includes support for Javascript, which 
is definitely a dynamic language. It seems inconsistent to me that QML would 
require the complete static type before instantiation. I'm not sure I know what 
it means when you say "static type" to describe something only known at runtime.

I do have a specific problem in QML I tried to solve using dynamic properties, 
but before getting into that I'd like to understand what QML is supposed to be.

-Jamey

On Sep 15, 2010, at 12:02 AM, Kennedy Aaron (Nokia-MS-Qt/Brisbane) wrote:

> Hi,
> 
> No it doesn't work, and no its not supposed to work.  Qt's dynamic
> properties do not fit the QML model very well which relies on knowing the
> complete static type of an object prior to instantiation, and we'd prefer
> not to support them.
> 
> Perhaps if you give more details about the actual problem you are trying to
> solve we can think of an alternative way.
> 
> Cheers,
> 
> Aaron
> 
> 
> On 15/09/10 2:58 AM, "Dzyubenko Denis (Nokia-MS-Qt/Oslo)"
> <denis.dzyube...@nokia.com> wrote:
> 
>> 
>> On 14. sep. 2010, at 18.20, Hicks Jamey (Nokia-NRC/Cambridge) wrote:
>> 
>>> How did you pass in the object? If you pass it as a QVariant you need to 
>>> cast
>>> it to QObject * first to make its slots and properties available.
>> 
>> I've created a test app that shows the problem. Maybe someone can tell me if
>> this is supposed to work at all:
>> 
>> #include <QtGui>
>> #include <QtDeclarative>
>> 
>> class MyItem: public QDeclarativeItem
>> {
>>    Q_OBJECT
>>    Q_PROPERTY(int bar READ bar WRITE setBar)
>> 
>> public:
>>    MyItem()
>>        : m_bar(69)
>>    {
>>        setProperty("foo", QVariant::fromValue<int>(42));
>>        setProperty("bar", QVariant::fromValue<int>(43));
>>    }
>> 
>>    int m_bar;
>>    int bar() const  { return m_bar; }
>>    void setBar(int value) { m_bar = value; }
>> };
>> QML_DECLARE_TYPE(MyItem);
>> 
>> int main(int argc, char **argv)
>> {
>>    QApplication app(argc, argv);
>>    qmlRegisterType<MyItem>("org.foobar.foo", 1, 0, "MyItem");
>>    QDeclarativeView view;
>> 
>>    view.setSource(QUrl::fromLocalFile("foo.qml"));
>> 
>>    view.show();
>>    return app.exec();
>> }
>> 
>> #include "main.moc"
>> 
>> 
>> 
>> and the foo.qml:
>> 
>> import Qt 4.7
>> import org.foobar.foo 1.0
>> 
>> MyItem {
>>    width: 100
>>    height: 100
>> 
>>    MouseArea {
>>        anchors.fill: parent
>>        onClicked: { console.log("foo =", parent.foo, "; bar =", parent.bar);
>> }
>>    }
>> }
>> 
>> 
>> I get the following output:
>> 
>> foo = undefined ; bar = 43
>> 
>> Denis.
>> 
>> 
>> _______________________________________________
>> Qt-qml mailing list
>> Qt-qml@trolltech.com
>> http://lists.trolltech.com/mailman/listinfo/qt-qml
> 


_______________________________________________
Qt-qml mailing list
Qt-qml@trolltech.com
http://lists.trolltech.com/mailman/listinfo/qt-qml

Reply via email to