我从C ++那里获得QQuickItem
就像这样。
QQuickItem * my_item = qmlEngine->rootObjects()[0]->findChild<QQuickItem*>("ItemObjectName");
my_item
有效&amp;已经设置了所有属性。
方案
我有 2个窗口,需要这个QQuickItem
来替代地绘制。我想将此my_item
呈现给不同的窗口。只要我将my_item
的Parent设置为另一个窗口
// the_other_window is a QQuickWindow
QQuickWindow * the_other_window;
// here I set parent
my_item->setParentItem(the_other_window->contentItem());
这要求我再次setParentItem
返回my_item
的原始窗口,否则它会在原始窗口中隐藏。这是有效的,但给了我不必要的依赖。相反,我正在尝试创建QQuickItem
&amp;的副本。对此进行setParentItem
。通过这样复制:
QQuickItem * item_copy = new QQuickItem(my_item);
问题:
但这似乎并没有创建QQuickItem
&amp;的副本。因此我在my_item
上看不到the_other_window
的副本。
问题:
我想知道的是,我如何创建一个有效的副本QQuickItem
到另一个指针QQuickItem * item_copy
&amp;在不影响原始QQuickItem
的可见性/状态的情况下在不同的窗口上呈现它?
答案 0 :(得分:2)
QQuickItem
的界面不提供克隆性。如果确实如此,则其所有子类都必须重新实现虚拟clone()
函数。
实际上,QQuickItem派生自QObject,它明确禁用类似复制的操作(复制构造函数和赋值运算符),因此它们也会在任何QQuickItem派生类中被禁用。即使你有一个QQuickItem的特定子类,你认为你知道如何复制,你也可以实现&#34; real&#34;复制它。
在后一种情况下,最接近的事情是实例化您的类型的新空白项,并手动将相关属性的所有值从旧实例复制到新实例。您可以封装copy
函数中的代码。