Russian Qt Forum

Qt => Общие вопросы => Тема начата: alexeev от Октябрь 23, 2013, 08:51



Название: Копия объекта
Отправлено: alexeev от Октябрь 23, 2013, 08:51
Здравствуйте, возник следующие вопрос навейнный темой http://www.prog.org.ru/topic_25877_0.html.
Получается, что вообще нельзя создать копию любого обеъкта? Следующий код не работает, как это можно обойти? Как создать копию?

Код:
QPushButton *But = new QPushButton("Button");
QPushButton Button;
Button = *(But);


Название: Re: Копия объекта
Отправлено: mutineer от Октябрь 23, 2013, 08:54
Если конструктор копирования у объекта закрыт, то глубокую копию никак не сделаешь


Название: Re: Копия объекта
Отправлено: Fregloin от Октябрь 23, 2013, 09:55
Создать копию QObject и его наследника довольно просто, нужно скопировать все свойства.
т.е. как то так

создать новый объект,
пройтись по всем свойствам источника и присовить их назначению...


Название: Re: Копия объекта
Отправлено: Igors от Октябрь 23, 2013, 15:18
Здравствуйте, возник следующие вопрос навейнный темой http://www.prog.org.ru/topic_25877_0.html.
Получается, что вообще нельзя создать копию любого обеъкта?
Не любого объекта, а любого виджета. Да, это запрещено, и это правильно. Где-то читал объяснение типа "а какой (разумный) результат хотите получить таким копированием?". Вторая кнопка поверх первой? Так все равно не получится напр если есть layout. Если нужно "штамповать" однотипные виджеты, выделите их создание в отдельный метод и вызовите его N раз, это несложно


Название: Re: Копия объекта
Отправлено: m_ax от Октябрь 23, 2013, 18:38
Судя по приведённой в первом посту теме, ТС хочет реализовать что-то в роде модель-представление. Где в качестве вьюхи выступает окно графика, а в качестве модели - сами данные (кривые). Зачем лишний раз их копировать?

На сколько мне известно, используя QWT это в принципе можно устроить..   


Название: Re: Копия объекта
Отправлено: codemonkey от Октябрь 24, 2013, 09:01
Код
C++ (Qt)
QPushButton *But = new QPushButton("Button");
QPushButton Button;
void* pBut=(void*)But;
void* pButton=(void*)&Button;
memcpy(pBut,pButton,sizeof(QPushButton));


Название: Re: Копия объекта
Отправлено: mutineer от Октябрь 24, 2013, 09:04
И теперь обе кнопки указывают на одни и те же данные. Первая удаленная кнопка эти данные уничтожит и вторая останется с мусорной памятью