Hi everyone, I was wondering if this method I implemented it's allowed or not. By allowed I mean if it is a terrible coding practise and it should be avoided, or if it is fair enough and I can freely use it.
I have to say in advance that I'm not a "featured" programmer, so I might not respect some good/common coding practise, and I'm sorry for that (and that's probably the reason why I'm writing here).
Basically I have an Item inside the file ParentQml.qml, in which I have two children:
Code:
// ParentQml.qml
Item{
id: defaultParent
property bool randomBoolProperty
DefautChild {
// no id
property bool prop1
property int prop2
property string prop3
property var prop4
enabled: parent.randomBoolProperty
}
property Item userChoice: useUserQml ? MyLovelyQml{} : someDefaultQml{}
}
I simplified the picture, but the point is that "userQml" is variable according to the user choice.
As a user, I cannot modify neither ParentQml.qml or DefautChild.qml files, but only MyLovelyQml.qml.
My problem is that, in general, from inside the file MyLovelyQml.qml I cannot access to any of the properties of any of its parents' children.
But I am an hubristic user and I want to disable DefaultChild! (because it is in conflict with something I do inside MyLovelyQml.qml)
In order to accomplish this, here comes the hack.
I know that DefautChild{} has a (more or less) unique set of properties. Represented previously as "prop1", "prop2", "prop3" and "prop4".
The method I used to disable (on will) DefaultChild is the following.
Code:
// MyLovelyQml.qml
Column{
id:myLovelyQml
property bool myUniqueProperty: true
Component.onCompleted: {
var defaultChild_Idx = 0
for (var i=0; i<parent.children.length; ++i){
// seaching for the child 'DefaultChild' by looking at all
// the properties I know it has
if ( (typeof parent.children[i].prop1 !== 'undefined')
&& (typeof parent.children[i].prop2 !== 'undefined')
&& (typeof parent.children[i].prop3 !== 'undefined')
&& (typeof parent.children[i].prop4 !== 'undefined')){
defaultChild_Idx = i;
}
}
parent.children[defaultChild_Idx].enabled = Qt.binding(function() {
return parent.randomBoolProperty &&
(typeof parent.userChoice.myUniqueProperty === 'undefined')
// when user will change "userChoice", "myUniqueProperty"
// will be undefined and only the value of
// "randomBoolProperty" will matter
})
}
}
So, as you see, this feels quite like stealing someone else work, even though when "myUniqueProperty" does not exist (because ParentQml is loading some other user's qml and not mine) then the default value of the child property is maintained.
Ok, to be more specific I did this because I'm interested in special keyboard layouts, such as ease, 8pen or flick. In order to work properly, these keyboards need to modify KeyboardBase.qml, in particular to disable the children MultiPointTouchArea{} and substitute it with something made ad hoc.
I didn't want to patch the non-user-accessible files, that is the reason i spent my time trying do cheat default files. As far as I understood the method works properly, but if this is a practise that really shouldn't be done, I'll stick with the patching.
Please let me know what you think and share your coding experience with me.
P.S. One of the problems is to understand which event should activate the function for the research. For now I use component.onCompleted: {}, but I would like to trigger it when MyLovelyQml becomes visible and I don't know which is the proper signal to be used (moreover, if its Qt Type is an Item, there is no component.onCompleted)
I have to say in advance that I'm not a "featured" programmer, so I might not respect some good/common coding practise, and I'm sorry for that (and that's probably the reason why I'm writing here).
Basically I have an Item inside the file ParentQml.qml, in which I have two children:
As a user, I cannot modify neither ParentQml.qml or DefautChild.qml files, but only MyLovelyQml.qml.
My problem is that, in general, from inside the file MyLovelyQml.qml I cannot access to any of the properties of any of its parents' children.
But I am an hubristic user and I want to disable DefaultChild! (because it is in conflict with something I do inside MyLovelyQml.qml)
In order to accomplish this, here comes the hack.
I know that DefautChild{} has a (more or less) unique set of properties. Represented previously as "prop1", "prop2", "prop3" and "prop4".
The method I used to disable (on will) DefaultChild is the following.
Ok, to be more specific I did this because I'm interested in special keyboard layouts, such as ease, 8pen or flick. In order to work properly, these keyboards need to modify KeyboardBase.qml, in particular to disable the children MultiPointTouchArea{} and substitute it with something made ad hoc.
I didn't want to patch the non-user-accessible files, that is the reason i spent my time trying do cheat default files. As far as I understood the method works properly, but if this is a practise that really shouldn't be done, I'll stick with the patching.
Please let me know what you think and share your coding experience with me.
P.S. One of the problems is to understand which event should activate the function for the research. For now I use component.onCompleted: {}, but I would like to trigger it when MyLovelyQml becomes visible and I don't know which is the proper signal to be used (moreover, if its Qt Type is an Item, there is no component.onCompleted)