Форум программистов, компьютерный форум CyberForum.ru

Как создать копию объекта, зная его указатель? - C++

Восстановить пароль Регистрация
 
ALeXUI_1
0 / 0 / 0
Регистрация: 11.09.2013
Сообщений: 8
22.10.2013, 16:49     Как создать копию объекта, зная его указатель? #1
Здравствуйте, существует следующая проблема. В своей программе я рисую график используя класс QwtPolarPlot. По нажатию на график, должно открыться новое окно, в котором будет точно такой же график. Хорошим решением было бы либо передать в метод создания окна копию объекта QwtPolarPlot, но в этом классе не определен конструктор копии, поэтому так сделать нельзя. Можно ли как-то решить данную проблему?
Есть ещё один варинат, создать на новом окне объект QwtPolarPlot, получить список всех элементов находящихся на первом графике, и прикрепить к новому объекту, но список элементов получается как список указателей на эти объекты, поэтому прикрепляя их на новый объект, на старом они пропадают. Какждый элемент списка представляет из себя Qlist <QwtPolarItem*>, его объект тоже создать нельзя, т.к QwtPolarItem - абстрактный класс. Как решить эту проблему?)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.10.2013, 16:49     Как создать копию объекта, зная его указатель?
Посмотрите здесь:

Дан файл произвольного типа. Создать его копию с новым именем. C++
C++ выделить место для объекта с помощью new или создать указатель, объект и присвоить один другому. какая разница?
C++ Создать копию объекта производного класса зная указатель на базовый
указатель на указатель или присваивание объекта C++
C++ как создать копию объекта, на который ссылается итератор?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
22.10.2013, 16:53     Как создать копию объекта, зная его указатель? #2
ALeXUI_1, Если не определен конструктор копирования - копию создать соответственно нельзя. Можно создать новый объект, если есть подходящий конструктор.
Ну и судя по референсу: http://qwtpolar.sourceforge.net/qwt_...8h_source.html конструктор копии не запрещен, следовательно не вижу проблем создать копию.
Raali
572 / 276 / 12
Регистрация: 06.07.2013
Сообщений: 917
Завершенные тесты: 1
22.10.2013, 16:53     Как создать копию объекта, зная его указатель? #3
QwtPolarPlot это что, виджет какой то?
ALeXUI_1
0 / 0 / 0
Регистрация: 11.09.2013
Сообщений: 8
22.10.2013, 17:05  [ТС]     Как создать копию объекта, зная его указатель? #4
ForEveR, Я пытался передать в метод создающий новое окно, сразу копию объекта, а не указатель, но сразу сталкивался с ошибками.
Ошибки:
Кликните здесь для просмотра всего текста

c:\QtSDK\Desktop\Qt\4.8.0\mingw\include\QtGui\qframe.h:-1: In copy constructor 'QwtPolarPlot::QwtPolarPlot(const QwtPolarPlot&)':

c:\QtSDK\Desktop\Qt\4.8.0\mingw\include\QtGui\qframe.h:140: ошибка: 'QFrame::QFrame(const QFrame&)' is private

c:\qwtpolar-1.0.1\include\qwt_polar_plot.h:46: ошибка: within this context

C:\Users\Vladimir\Desktop\Kontrolnye_pynkt 16.10.2013\KontrolOfQuality\debug\moc_cIfrnsSNS.cpp:-1: In static member function 'static void cIfrnSns::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)':

C:\Users\Vladimir\Desktop\Kontrolnye_pynkt 16.10.2013\KontrolOfQuality\debug\moc_cIfrnsSNS.cpp:57: synthesized method 'QwtPolarPlot::QwtPolarPlot(const QwtPolarPlot&)' first required here

C:\Users\Vladimir\Desktop\Kontrolnye_pynkt 16.10.2013\KontrolOfQuality\debug\moc_cIfrnsSNS.cpp:57: error: initializing argument 1 of 'void cIfrnSns::SlotShowBigMishen(QwtPolarPlot)'


Raali, Да, для отрисовки графиков в полярных координатах
Raali
572 / 276 / 12
Регистрация: 06.07.2013
Сообщений: 917
Завершенные тесты: 1
22.10.2013, 17:24     Как создать копию объекта, зная его указатель? #5
QObject has neither a copy constructor nor an assignment operator. This is by design. Actually, they are declared, but in a private section with the macro Q_DISABLE_COPY(). In fact, all Qt classes derived from QObject (direct or indirect) use this macro to declare their copy constructor and assignment operator to be private. The reasoning is found in the discussion on Identity vs Value on the Qt Object Model page.

The main consequence is that you should use pointers to QObject (or to your QObject subclass) where you might otherwise be tempted to use your QObject subclass as a value. For example, without a copy constructor, you can't use a subclass of QObject as the value to be stored in one of the container classes. You must store pointers.

вот что пишут, нужно использовать указатели на QObject, как я понимаю это родительский класс виджетов или еще выше
ALeXUI_1
0 / 0 / 0
Регистрация: 11.09.2013
Сообщений: 8
22.10.2013, 17:28  [ТС]     Как создать копию объекта, зная его указатель? #6
Если добавлю просто указатель, то график пропадет на главном окне. Новое окно служит для увеличения графика. Это типа того, если вы в поисковике картинки ищите, видете маленький варинат, но нажав на картинку открывается большой.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.10.2013, 17:35     Как создать копию объекта, зная его указатель?
Еще ссылки по теме:

Как изменить тип объекта, на который указывает указатель? C++
Как создать указатель на функцию-член класса и вызвать его? C++
Как узнать имя exe зная его id (WinApi,c++) C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Raali
572 / 276 / 12
Регистрация: 06.07.2013
Сообщений: 917
Завершенные тесты: 1
22.10.2013, 17:35     Как создать копию объекта, зная его указатель? #7
можно увеличить график, потом передать его обратно в старое окно по закрытии
Yandex
Объявления
22.10.2013, 17:35     Как создать копию объекта, зная его указатель?
Ответ Создать тему
Опции темы

Текущее время: 11:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru