Дублировать QWidget - PullRequest
       13

Дублировать QWidget

13 голосов
/ 25 июля 2011

Мне нужно иметь возможность скопировать 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 Ответ

13 голосов
/ 25 июля 2011

Это по замыслу.Обычный способ решить эту проблему - реализовать метод (обычно называемый clone()), который позволяет вам указать точную семантику, которая должна применяться при копировании экземпляров вашего класса.Этот подход также предотвращает неявное копирование непреднамеренно, например, классами контейнеров.

Из Документов Qt :

Нет конструктора или назначения копированияoperator

QObject не имеет ни конструктора копирования, ни оператора присваивания.Это по замыслу.На самом деле они объявлены, но в закрытом разделе с макросом Q_DISABLE_COPY ().Фактически, все классы Qt, производные от QObject (прямые или косвенные), используют этот макрос, чтобы объявить их конструктор копирования и оператор присваивания закрытыми.Обоснование можно найти в обсуждении Identity vs Value на странице Qt Object Model.

Основным следствием этого является использование указателей на QObject (или на ваш подкласс QObject), гдев противном случае может возникнуть искушение использовать ваш подкласс QObject в качестве значения.Например, без конструктора копирования вы не можете использовать подкласс QObject в качестве значения, которое будет храниться в одном из классов контейнера.Вы должны хранить указатели.

...