复制QWidget

时间:2011-07-24 20:43:52

标签: c++ qt copy-constructor qwidget

我需要能够复制一个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();
}

1 个答案:

答案 0 :(得分:13)

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

来自Qt docs

  

没有复制构造函数或赋值运算符

     

QObject既没有复制构造函数也没有赋值运算符。   这是设计的。实际上,他们被宣布,但在私人   带有宏Q_DISABLE_COPY()的部分。实际上,所有的Qt类   派生自QObject(直接或间接)使用此宏来声明   他们的复制构造函数和赋值运算符是私有的。该   关于Qt Identity vs Value的讨论中可以找到推理   对象模型页面。

     

主要结果是你应该使用指向QObject的指针(或者   你的QObject子类,否则你可能会想要使用它   您的QObject子类作为值。例如,没有副本   构造函数,你不能使用QObject的子类作为值   存储在其中一个容器类中。你必须存储指针。