<div dir="auto">Just wandering, what `QObject:: children ()` shall return? ;p<div dir="auto"><br><div dir="auto"><br><div data-smartmail="gmail_signature" dir="auto">Konstantin</div></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">пт, 3 мая 2019 г., 22:09 Konstantin Ritt <<a href="mailto:ritt.ks@gmail.com">ritt.ks@gmail.com</a>>:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto">Ivan,<div dir="auto"><br></div><div dir="auto">note that observer_ptr is mostly like</div><div dir="auto"><br></div><div dir="auto"><pre style="margin-top:0px;margin-bottom:0.8em;padding:10px;border:0px;line-height:inherit;font-family:consolas,menlo,monaco,"lucida console","liberation mono","dejavu sans mono","bitstream vera sans mono","courier new",monospace;font-size:13px;vertical-align:baseline;color:rgb(57,51,24);background-color:rgb(240,240,240);max-height:300px"><code style="margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;font-weight:inherit;line-height:inherit;font-family:consolas,menlo,monaco,"lucida console","liberation mono","dejavu sans mono","bitstream vera sans mono","courier new",monospace;vertical-align:baseline;max-height:300px"><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(16,16,148)">template</span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(48,51,54)"><</span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(16,16,148)">typename</span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(48,51,54)"> T</span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(48,51,54)">></span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(48,51,54)">
</span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(16,16,148)">using</span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(48,51,54)"> observer_ptr </span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(48,51,54)">=</span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(48,51,54)"> T</span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(48,51,54)">*;</span></code></pre></div><div dir="auto"><br></div><div dir="auto">so what about</div><div dir="auto"><br></div><div dir="auto"><div dir="auto" style="font-family:sans-serif"><pre style="margin-top:0px;margin-bottom:0.8em;padding:10px;border:0px;line-height:inherit;font-family:'consolas','menlo','monaco','lucida console','liberation mono','dejavu sans mono','bitstream vera sans mono','courier new',monospace;font-size:13px;vertical-align:baseline;color:rgb(57,51,24);background-color:rgb(240,240,240);max-height:300px"><code style="margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;font-weight:inherit;line-height:inherit;font-family:'consolas','menlo','monaco','lucida console','liberation mono','dejavu sans mono','bitstream vera sans mono','courier new',monospace;vertical-align:baseline;max-height:300px"><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(16,16,148)"><br></span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(48,51,54)">layout2->addWidget(</span></code>layout->addWidget(make_unique<QPushButton>("right")))->setFlat(true);</pre></div></div><div dir="auto">?</div><div dir="auto"><br></div><div dir="auto"><br>Regards,<br><div data-smartmail="gmail_signature" dir="auto">Konstantin</div></div><br><br><div class="gmail_quote" dir="auto"><div dir="ltr" class="gmail_attr">пт, 3 мая 2019 г., 21:41 Иван Комиссаров <<a href="mailto:abbapoh@gmail.com" target="_blank" rel="noreferrer">abbapoh@gmail.com</a>>:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Thiago, can you please elaborate how you see this?<br>
<br>
For a simple TreeItem a pair of std::unique_ptr/std::observer_ptr should be enough (with a bunch of convenience methods to insert children):<br>
<br>
struct TreeItem<br>
{<br>
   observer_ptr<TreeItem> parent;<br>
   vector<unique_ptr<TreeItem>> children;<br>
};<br>
<br>
Yes, the code becomes a bit verbose, but the ownership transfer is now visible with those (ugly) std::moves.<br>
<br>
I can think of an alternative of using shared pointers (since we already have a QPointer aka WeakPointer<QObject>) but I think it gives too much overhead just to support corner cases.<br>
<br>
If QLayout::addWidget() will return an observer_ptr*, you can just do<br>
<br>
auto button = layout->addWidget(make_unique<QPushButton>(«RIGHT»));<br>
button->setFlat(true);<br>
<br>
* ok, you need a template version of addWidget for that, but since c++ is all about templates these days it doesn’t really a disadvantage<br>
<br>
<br>
> 3 мая 2019 г., в 20:24, Thiago Macieira <<a href="mailto:thiago.macieira@intel.com" rel="noreferrer noreferrer" target="_blank">thiago.macieira@intel.com</a>> написал(а):<br>
> <br>
> On Friday, 3 May 2019 10:22:20 PDT Daniel Teske wrote:<br>
>> std::unique_ptr<QPushButton> rightButton =<br>
>> std::make_unique<QPushButton>("RIGHT");<br>
>> layout->addWidget(std::move(rightButton));<br>
> <br>
> The problem in this particular example is that once you've added the widget, <br>
> the rightButton smart pointer no longer has a pointer. You can't continue to <br>
> set up your push button. In most cases, this is just a matter of moving the <br>
> set up before the addition / reparenting, or using the other idiom where the <br>
> object is never in a smart pointer in the first place.<br>
> <br>
> So this begs the question of whether std::unique_ptr is the best smart pointer <br>
> for this scenario. Would it make sense to create one that understands parent-<br>
> child relationship?<br>
> <br>
> -- <br>
> Thiago Macieira - thiago.macieira (AT) <a href="http://intel.com" rel="noreferrer noreferrer noreferrer" target="_blank">intel.com</a><br>
>  Software Architect - Intel System Software Products<br>
> <br>
> <br>
> <br>
> _______________________________________________<br>
> Development mailing list<br>
> <a href="mailto:Development@qt-project.org" rel="noreferrer noreferrer" target="_blank">Development@qt-project.org</a><br>
> <a href="https://lists.qt-project.org/listinfo/development" rel="noreferrer noreferrer noreferrer" target="_blank">https://lists.qt-project.org/listinfo/development</a><br>
<br>
_______________________________________________<br>
Development mailing list<br>
<a href="mailto:Development@qt-project.org" rel="noreferrer noreferrer" target="_blank">Development@qt-project.org</a><br>
<a href="https://lists.qt-project.org/listinfo/development" rel="noreferrer noreferrer noreferrer" target="_blank">https://lists.qt-project.org/listinfo/development</a><br>
</blockquote></div></div>
</blockquote></div>