我需要能够复制一个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();
}
答案 0 :(得分:13)
这是设计的。解决它的常用方法是实现一个方法(通常称为clone()
),它允许您指定在复制类的实例时应该应用的确切语义。这种方法还可以防止无意的副本被隐式地制作,例如容器类。
来自Qt docs:
没有复制构造函数或赋值运算符
QObject既没有复制构造函数也没有赋值运算符。 这是设计的。实际上,他们被宣布,但在私人 带有宏Q_DISABLE_COPY()的部分。实际上,所有的Qt类 派生自QObject(直接或间接)使用此宏来声明 他们的复制构造函数和赋值运算符是私有的。该 关于Qt Identity vs Value的讨论中可以找到推理 对象模型页面。
主要结果是你应该使用指向QObject的指针(或者 你的QObject子类,否则你可能会想要使用它 您的QObject子类作为值。例如,没有副本 构造函数,你不能使用QObject的子类作为值 存储在其中一个容器类中。你必须存储指针。