Подтвердить что ты не робот

Дублировать 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();
}
4b9b3361

Ответ 1

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

Из Qt docs:

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

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

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