如何创建QQuickItem的单独副本并将其呈现在不同的窗口上



我从c 侧获取了一个QQuickItem

QQuickItem * my_item = qmlEngine->rootObjects()[0]->findChild<QQuickItem*>("ItemObjectName");

my_item有效&amp;将所有属性设置在其上。

方案
我有 2个Windows ,需要在更改上绘制此QQuickItem。我想将此my_item渲染到另一个窗口。只要我将my_item的父母设置为另一个窗口

,这一切都很好。
// 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;因此,我在the_other_window上没有看到my_item的副本。

问题:
我想知道的是,如何在另一个指针中创建有效的QQuickItem QQuickItem * item_copy&amp;在不同的窗口上渲染它,而不会影响原始QQuickItem的可见性/状态?

QQuickItem的接口不提供可言行性。如果确实如此,那么其所有子类都必须重新进来虚拟clone()函数。

的确,qquickitem源自qobject,该QoBject明确禁用类似复制的操作(复制构造函数和分配运算符),因此在任何Qquickitem衍生的类中也都禁用它们。即使您有一个特定的Qquickitem子类,您认为您知道如何复制,也无法实现"真实"复制。

在后一种情况下要做的最接近的事情是实例化您类型的新的空白项目,并手动将所有相关属性的值从旧实例复制到新实例。您可以将代码封装在copy函数中。

相关内容

  • 没有找到相关文章

最新更新