On Fri, 8 Oct 2010 02:44:25 +0200, Andreas Pakulat <ap...@gmx.de> wrote: > On 08.10.10 01:08:08, Giovanni Bajo wrote: >> On Thu, 07 Oct 2010 16:34:41 +0100, Phil Thompson >> <p...@riverbankcomputing.com> wrote: >> > On Thu, 7 Oct 2010 00:35:16 +0200, David Boddie <da...@boddie.org.uk> >> > wrote: >> >> On Tue Oct 5 09:36:49 BST 2010, Phil Thompson wrote: >> >> >> >>> The minehunt example only seems to need support for lists of >> >>> QObjects. >> >>> Are >> >>> there any other examples anywhere that have different use cases? >> >> >> >> I guess that's more or less what it is, though it needs something >> >> extra >> > to >> >> make the QML engine aware of the new TileData type, used as a property >> > type >> >> in the MinehuntGame class, and used as the model that holds the tile >> > data >> >> in >> >> the game. If you can figure out a way to expose homogeneous Python >> lists >> > as >> >> QDeclarativeListProperty containers then that would be cool. >> > >> > Done that. >> > >> >> Looking through the examples, there are places where qmlRegisterType >> >> is >> >> used >> >> to add C++ classes to QML as new item types. The "Writing QML >> extensions >> >> with >> >> C++" tutorial in examples/declarative/tutorials/extending is one of >> > these. >> > >> > ...and there we hit the showstopper. >> > >> > It looks like it is not possible to publish Python types to QML (and >> > use >> > the QML import statement) because QML uses a QObject's staticMetaObject >> > instead of calling metaObject(). That automatically limits it to types >> > known at compile time and no way to inject dynamic meta-objects created >> at >> > run time. >> >> I think that's because they need to construct new instances for that type >> at runtime. I can't see how an object could be instantiated through a >> pointer to its QMetaObject instance (let alone a *dynamic* meta object). > > Even though I might just show that I don't have a real clue about what > you're talking, but how about QMetaObject::newInstance()? At least by the > API docs it sounds as that function would allow to create a new instance > with just a QMetaObject pointer. (as long as Q_INVOKEABLE is used for at > least 1 constructor).
You don't know the Python type of the instance to create. What Qt needs is a non-template function that can register QMetaObject instances created on the heap, a virtual version of QMetaObject::newInstance(), and virtual non-static versions of QMetaObject::invokeMethod(). Phil _______________________________________________ PyQt mailing list PyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt