[Interest] Dynamically created item destroyed with original parent despite reparenting

Peter Klosowski kloffy at gmail.com
Sun Dec 20 17:27:14 CET 2015


Just to let you know, quick attempts to hack it such as...

newParent.data[0] = target;

... or...

newParent.data = [target];

... run without errors, but behavior is unchanged (i.e. the blue rectangle
gets destroyed with oldParent).


On Mon, Dec 21, 2015 at 2:13 AM, Peter Klosowski <kloffy at gmail.com> wrote:

>
>
> On Mon, Dec 21, 2015 at 2:03 AM, Elvis Stansvik <elvstone at gmail.com>
> wrote:
>
>> 2015-12-20 16:39 GMT+01:00 Peter Klosowski <kloffy at gmail.com>:
>> > Unfortunately, the solution Elvis provided does not work for me.
>> Instead, I
>> > get the following error:
>> >
>> > TypeError: Property 'push' of object [object Object] is not a function
>> >
>>
>> Aha, I only tested it briefly in qmlviewer, so I didn't see those
>> errors. So then it only seemingly worked for me.
>>
>
> No worries, it would have been awesome if the solution was that simple.
>
>
>> > Of course, that means the blue rectangle stays on the screen, but only
>> > because the code after the error never gets executed (i.e. oldParent
>> never
>> > gets destroyed).
>> >
>> > Nevertheless, I believe this would be the right track, if it is
>> possible at
>> > all.
>>
>> Yes I think from the docs I found ("Any object assigned to an item's
>> data property becomes a child of the item within its QObject hierarchy
>> [...]"), it should be possible somehow. Question is how to do that
>> assignment. Or perhaps the docs are a little misleading, and by
>> "assignment" they simply mean declaring an item inside another, and
>> there's no way to do this dynamically..? Would be kind of weird if it
>> wasn't possible though.
>>
>
> I agree, that seems like a pretty glaring omission. Digging into the
> sources (qt/qdeclarativelist.cpp), it appears that lists have a method for
> appending items, but as far as I can tell it looks like it is not
> accessible via QML. In the worst case, I could probably implement the
> newParent in C++ and wrap the call to append in a custom Q_INVOKABLE
> function. So at least I have a contingency plan now...
>
>
>> Elvis
>>
>> >
>> > Best regards,
>> > kloffy
>> >
>> >
>> > On Mon, Dec 21, 2015 at 1:28 AM, Peter Klosowski <kloffy at gmail.com>
>> wrote:
>> >>
>> >> Thank you all for your suggestions. This is an artificial example to
>> >> illustrate the behavior that I am having problems with. I could also
>> >> dynamically create the parent, that is not of relevance to my problem.
>> >>
>> >> On the other hand, the information that Elvis provided about the
>> >> distinction between visual parent and QObject parents seems to hit the
>> nail
>> >> on the head. I will test and report back!
>> >>
>> >> Best regards,
>> >> koffy
>> >>
>> >> On Mon, Dec 21, 2015 at 1:10 AM, Elvis Stansvik <elvstone at gmail.com>
>> >> wrote:
>> >>>
>> >>> 2015-12-20 16:05 GMT+01:00 Personal Gmail
>> >>> <siamak.rahimi.motem at gmail.com>:
>> >>> > Hi Elvis ,
>> >>> > Can we destroy() old parent which is not a component ? In other
>> words,
>> >>> > Is
>> >>> > not the destroy only for component created dynamically ?
>> >>> > I think oldParent.destory is problematic.
>> >>>
>> >>> Aha, now I see what you mean. I've never actually used QML myself, and
>> >>> didn't know this (and that setting transparency to 0 is actually the
>> >>> recommended way to remove it from the visual scene hierarchy).
>> >>>
>> >>> But I think you're right, and that Peter should probably do that
>> >>> instead, or otherwise make sure his old parent is created dynamically.
>> >>>
>> >>> In any case, I tried
>> >>>
>> >>> newParent.data.push(target);
>> >>>
>> >>> and it seems to work, the blue rect remains. But I realize now that
>> >>> .push is not documented in Qt 5 documentation
>> >>> (http://doc.qt.io/qt-5/qml-list.html) so perhaps this is not
>> >>> guaranteed to be supported. In the old 4.x docs, it says there are
>> >>> limitations on .push (it'll only create a new list, not modify an
>> >>> existing, but don't know if this holds for 5.x).
>> >>>
>> >>> Elvis
>> >>>
>> >>> >
>> >>> > On 20 Dec 2015, at 17:02, Elvis Stansvik <elvstone at gmail.com>
>> wrote:
>> >>> >
>> >>> > Elvis
>> >>> >
>> >>> >
>> >>> _______________________________________________
>> >>> Interest mailing list
>> >>> Interest at qt-project.org
>> >>> http://lists.qt-project.org/mailman/listinfo/interest
>> >>
>> >>
>> >
>> >
>> > _______________________________________________
>> > Interest mailing list
>> > Interest at qt-project.org
>> > http://lists.qt-project.org/mailman/listinfo/interest
>> >
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20151221/62cf331a/attachment.html>


More information about the Interest mailing list