复制一个QWidget

Duplicate a QWidget

本文关键字:一个 QWidget 复制      更新时间:2023-10-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();
}

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

来自Qt文档:

无复制构造函数或赋值操作符

QObject既没有复制构造函数,也没有赋值操作符。这是设计好的。实际上,它们是声明的,但是在私有的使用宏Q_DISABLE_COPY()。实际上,所有的Qt类派生自QObject(直接或间接)使用此宏来声明它们的复制构造函数和赋值操作符必须是私有的。的在Qt上对同一性与价值的讨论中找到了推理对象模型页。

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