我需要能够复制一个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的子类作为要使用的值存储在一个容器类中。必须存储指针。