Ok...sorry for the spam. I've just noticed this sentence in the documentation QVariantList and QVariantMap to JavaScript Array and Object <http://doc.qt.io/qt-5/qtqml-cppintegration-data.html>:
[...] Similarly, if a C++ type uses a QVariantList <http://doc.qt.io/qt-5/qvariant.html#QVariantList-typedef> or QVariantMap <http://doc.qt.io/qt-5/qvariant.html#QVariantMap-typedef> type for a property type or method parameter, the value can be created as a JavaScript array or object in QML, and is automatically converted to aQVariantList <http://doc.qt.io/qt-5/qvariant.html#QVariantList-typedef> or QVariantMap <http://doc.qt.io/qt-5/qvariant.html#QVariantMap-typedef> when it is passed to C++. So, following that "or object in QML", is this the case I've encountered? The string object was trasformed in a QVariantList, matching the first signature in the reorderd header? Thanks again, F. --- Federico Buti On 16 February 2015 at 13:09, Federico Buti <[email protected]> wrote: > Hi list. > > I've made an intensive use of INVOKABLE/SLOT functions in QML and I've > never encounted any problem. Up until now. > > I'm sure that function overloading works properly since I've used it a lot > (also the related commit can be found here > <https://qt.gitorious.org/qt/tmartsums-qt/commit/1d7b672fd46abab51a0124ad19aad18e5d14f1a8>). > However, I've noticed a strange behaviour by working with the > ArrayDataModel available here <https://github.com/dridk/ArrayDataModel>. > > I've registered an instance of the model as a context property in the > usual way: > > ArrayDataModel model; > > engine.rootContext()->setContextProperty("model", &model); > > > Then in QML I've inserted a call to a SLOT in this way: > > Button { > > text: "click me!" > > onClicked: { > > model.insert(model.size(), "Item " + (model.size() + 1)); > > } > > } > > > Theoretically, the method to be invoked by the runtime should be > > void insert (int i, const QVariant &value); > > > However, if I exchange position of overloaded functions, i.e. if I write > the header as > ββ > > Q_SLOT void insert (int i, const QVariant &value); > > Q_SLOT void insert (int i, const QVariantList &values); > > > instead of the original > > Q_SLOT void insert (int i, const QVariantList &values); > > Q_SLOT void insert (int i, const QVariant &value); > > > the function which is called is (wrongly) > > > > Q_SLOT void insert (int i, const QVariantList &values); > > > βIs this > β a BUG, an intended behaviour, a specific conversion JS <--> C++, e.g. > the parameter is seen as a single-item-array and made match with the wrong > overload? Or something else I cannot understand? :) > Thanks in advance for any insight, > F. >
_______________________________________________ Interest mailing list [email protected] http://lists.qt-project.org/mailman/listinfo/interest
