[PyQt] Necessary to register type before setting context property?

Elvis Stansvik elvstone at gmail.com
Sun May 8 21:22:59 BST 2016


2016-05-08 22:20 GMT+02:00 Elvis Stansvik <elvstone at gmail.com>:
> Hi all,
>
> The docs at
>
>     http://pyqt.sourceforge.net/Docs/PyQt5/qml.html
>
> say
>
>> * Python types that are sub-classed from QObject can be registered with QML.
>> * Instances of registered Python types can be created and made available to QML scripts.
>> * Instances of registered Python types can be created by QML scripts.
>> * Singleton instances of registered Python types can be created automatically by a QML engine and made available to QML scripts.
>> * QML scripts interact with Python objects through their properties, signals and slots.
>> * Python properties, signals and slots can be given revision numbers that only those implemented by a specific version are made available to QML.
>
> I was wondering about:
>
>> * Instances of registered Python types can be created and made available to QML scripts.
>
> Does this refer to setting context properties on the root context of
> the QML engine?
>
> Because I just tried, and this seems to work even with the
> registration commented out:
>
> #qmlRegisterUncreatableType(
> #    Machine, 'com.example.Machine', 1, 0, 'Machine',
> #    'Machine is not instantiable from QML'
> #)
>
> machine = Machine()
>
> engine = QQmlApplicationEngine()
> engine.rootContext().setContextProperty('machine', machine)
>
> The "machine" property is available in QML, I can bind to its
> properties, pass it around as argument in JS function calls and
> everything seems to work.
>
> Is there some functionality that will not work when I skip registering
> the type with qmlRegister*() ?

I know that I'll not be able to refer to the type in QML of course,
but I mean if there's something that will be missing when it comes to
interacting with the instance held in the context property.

Elvis

>
> Thanks,
> Elvis


More information about the PyQt mailing list