复制一个QWidget
问题描述:
我需要能够复制一个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();
}
答
这是设计。解决此问题的常用方法是实现一种方法(通常称为clone()
),该方法允许您指定在复制类的实例时应应用的确切语义。这种方法还可以防止意外复制,比如容器类。
从Qt docs:
没有拷贝构造函数或赋值操作符
的QObject既没有拷贝构造函数也不是赋值运算符。 这是设计。实际上,它们是声明的,但在私有 部分中使用了宏Q_DISABLE_COPY()。实际上,从QObject(直接或间接)派生的所有Qt类 都使用此宏声明 其复制构造函数和赋值运算符是私有的。 推理可在Qt 对象模型页面的Identity vs Value的讨论中找到。
主要的后果是你应该使用指向QObject的指针(或者指向你的QObject子类的指针),否则你可能会试图使用你的QObject子类的 作为值。例如,如果没有复制 构造函数,则不能将QObject的子类用作存储在其中一个容器类中的值为 。你必须存储指针。