我需要能够复制Qwidget,以便我可以复制一个窗口,因为它会在运行时更改。这可能吗?

void Duplicate(QWidget * Show)
{
 //I tried...
 Qwidget Shw = *Show; //but operator= is private
 //and the copy constructor (I think), which is also private
 Qwidget Shw(*Show);
 //

 Shw.Show();
}
有帮助吗?

解决方案

这是设计。解决该方法的通常方法是实现一种方法(通常称为 clone()),这使您可以指定在复制课程实例时应应用的确切语义。这种方法还防止了无意的副本被隐式制作,例如通过容器类别。

来自 QT文档:

没有复制构造函数或作业操作员

QObject既没有复制构造函数,也没有分配运算符。这是设计。实际上,它们被声明,但在带有宏q_disable_copy()的私有部分中。实际上,从Qobject(直接或间接)得出的所有QT类都使用此宏来声明其复制构造函数和分配运算符为私有。在讨论中发现了推理 身份与值 在QT对象模型页面上。

主要结果是,您应该使用指针来qObject(或qobject子类),否则您可能会在其中使用qobject子类用作值。例如,如果没有复制构造函数,则不能使用Qobject的子类作为存储在一个容器类中的值。您必须存储指针。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top