How do you access properties of a QML component in C++?
Okay so I understand you can connect signals and slots between QML and C++ objects and how to pass stuff generated in C++ to QML but how would I go about calling property of QML object for use in C++. Basically what I am trying to do is take text input from the TextInput component in QML and use it to set the currentPath() of an object which in the QDir class. I am sure I messed up a lot syntax and stuff there but I am pretty new to this.
I was thinking of doing something like
and then calling text property like so and using QString to make a string.
and then doing the following to set my QDir path
But this doesn’t work as I get following error
request for member ‘text’ in ‘textIn’, which is of non-class type ‘QObject*’
Anyone know the proper way to go about retrieving properties of QML objects for use in C++?
I would also be okay with being able to set the a variable in QML equal to some variable and then being able to call that in C++.
I would also be okay with being told I am asking a stupid question and what I am talking about is impossible or there is a better way to do such a thing any help would be great.
Edit: use @ tags to markup code sections please; Andre
13 replies
Look at:
Locating child objects in QML [doc.qt.nokia.com]
Link [doc.qt.nokia.com]
The last post helped quite a bit I am having trouble using it though can’t seem to find any examples of people actually using it so not sure how I am supposed to implement that piece of code. In the form it is presented it isn’t working for me. Do I need to use Q_PROPERTY macros or anything to make it work? Not really sure if what I need to make it work.
I’ll check to see if that works but here is something that does work really well
- QDeclarativeProperty property([name of element], "[name of property]");
and then to call the property just do
- property.read()
- property.write()
and you can even do stuff like property.read().toString etc. this is what I was really looking for I think but thanks for all the help wouldn’t have been able to find it without the leads.
You still need stuff like
to use this though
Edit: use @ tags to markup code sections please.
c++ code
- QDeclarativeEngine engine;
- QDeclarativeComponent component(&engine, url);
- if (object) {
- object->setProperty("currentValue", newVal);
- delete object;
- object = NULL;
- }
and my qml file:
- Item {
- id: line
- objectName: "line"
- property real currentValue: 100
- property real minimum: 0
- property real maximum: 200
- property int xMax: line.width - rect.width - 4
- onCurrentValueChanged: { rect.x = 2 + (currentValue - minimum) * line.xMax / (maximum - minimum) }
- signal valueChanged(real val)
- width: 400
- height: 20
- Rectangle {
- id: rect
- x: 0; y: 0
- width: 100; height: 20
- color: "red"
- MouseArea {
- anchors.fill: parent
- drag.axis: Drag.XAxis
- drag.target: rect
- drag.minimumX: 0
- drag.maximumX: line.width - rect.width
- onPositionChanged: {
- line.currentValue = (maximum - minimum) * (rect.x-2) / line.xMax + minimum
- line.valueChanged(line.currentValue)
- }
- }
- }
- }
thanks in advance
What is the delete statement doing on line 6 of your code? What do you expect to happen if you first set a property, and then immediately delete the object?
What you are doing here, is creating an object, setting a property on it, and then immediately disposing of it again. That seems like a rather useless thing to do. Instead, you should try to find the object you wish to manipulate, and then modify its properties. Or, perhaps better from a QML/declarative way of thinking kind-of-perspective, you should create a QObject derived object, give it properties for the position, insert it into your QML environment, and bind to these properties.
You must log in to post a reply. Not a member yet? Register here!




