题
我需要能够复制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的子类作为存储在一个容器类中的值。您必须存储指针。
不隶属于 StackOverflow