[Solved] QtQuick Application recommended "To-Do"s
-
hello,
can you give me some exercises on Qml and C++ binding or some examples, if you have some.
i already did some binding with slots, but i want to do more than (or then, excuse my grammar) printing some data in a qml window.thank you!
-
Hey,
your Viewer has got a rootContext() and a rootObject(). Lets just take the rootObject:
@QQuickView *view = new QQuickView();
view->setSource(QUrl("YourQmlFile.qml"));
QObject object = (QObject)view->rootObject();@The rootObject is your top-level object in qml and has got all other components as children. If you are searching for a children you should give it an objectName.
@Rectangle {
objectName: "myRectangle"
// some code
}@Now we search for our Rectangle using the function findChild().
@QObject myObject = object->findChild<QObject>("myRectangle");
if(object){
// We got it :)
}@Lets go ahead and set a property:
@object->setProperty("propertyName", QVariant("someValue"));@It’s also easy to get a property:
@QVariant ourProperty = object->property("propertyName");@You could use QMetaObject::invokeMethod to invoke a QML method.
For example:
@QQuickView *view = new QQuickView();
QObject object = (QObject)view->rootObject();
QMetaObject::invokeMethod(object, "nameOfYourQmlFunction");@If you want to pass parameters:
@QMetaObject::invokeMethod(object, "nameOfYourQmlFunction", Q_ARG(QVariant, "valueToSend"))@You can replace the String with booleans or integers, QML transforms them to it’s required format. If you want to have some values returned you’ll need a Q_RETURN_ARG instead of the Q_ARG.
Function in the Documentation:
@bool QMetaObject::invokeMethod(QObject * obj, const char * member, Qt::ConnectionType type, QGenericReturnArgument ret, QGenericArgument val0 = QGenericArgument( 0 ), QGenericArgument val1 = QGenericArgument(), QGenericArgument val2 = QGenericArgument(), QGenericArgument val3 = QGenericArgument(), QGenericArgument val4 = QGenericArgument(), QGenericArgument val5 = QGenericArgument(), QGenericArgument val6 = QGenericArgument(), QGenericArgument val7 = QGenericArgument(), QGenericArgument val8 = QGenericArgument(), QGenericArgument val9 = QGenericArgument())[static]@For further informations i would recommend you to read:
"Using QML Bindings in C++ Applications":http://qt-project.org/doc/qt-4.8/qtbinding.html
"Interacting with QML Objects from C++":http://qt-project.org/doc/qt-5.0/qtqml/qtqml-cppintegration-interactqmlfromcpp.html
"Calling Functions":http://qt-project.org/doc/qt-4.8/qtbinding.html#calling-functions
"Receiving Signals":http://qt-project.org/doc/qt-4.8/qtbinding.html#receiving-signals
"Supportet Datatypes":http://qt-project.org/doc/qt-4.8/qtbinding.html#supported-data-typesBeside of that you can also provide a custom Cpp model to QML.
-
thank you.
i find your post more helpful than what i could find on qt-project.org.
off topic: i'm new on qt and forums and whatnot. if you can close this topic as solved, that would be great. :D
-
You're welcome, glad i could help you.
It is not possible to close a thread, but you could edit your mainpost and add a [Solved] in front of the threadname.