复制一个QWidget

16

我需要能够复制一个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个回答

16

这是有意为之的。解决这个问题的通常方法是实现一个方法(通常称为clone()),允许您指定在复制类实例时应该应用哪些确切语义。这种方法还可以防止不经意地进行隐式副本,例如由容器类。

来自Qt文档

没有拷贝构造函数或赋值运算符

QObject既没有拷贝构造函数也没有赋值运算符。 这是有意为之的。实际上,它们被声明在一个私有部分中,并使用宏Q_DISABLE_COPY()。事实上, 所有从QObject(直接或间接)派生的Qt类都使用此宏将它们的拷贝构造函数和赋值运算符声明为私有的。 原因可以在Qt对象模型页面的Identity vs Value讨论中找到。

主要的结果是,在可能会尝试使用QObject子类作为值的情况下,您应该使用指向QObject(或您的QObject子类)的指针。例如,如果没有拷贝构造函数,则无法将QObject子类用作要存储在其中之一的容器类中的值。您必须存储指针。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接