Russian Qt Forum

Qt => Общие вопросы => Тема начата: xintrea от Февраль 24, 2016, 22:10



Название: Как сделать глубокую копию QDomNode в конструкторе копирования?
Отправлено: xintrea от Февраль 24, 2016, 22:10
Есть некий класс Record, в котором есть protected-свойство:

Код:
QDomElement setupDomElement;

В момент копирования надо создать глубокую копию этого свойства.Я пишу так:

Код:
Record::Record(const Record &obj)
{
  ...
  setupDomElement=obj.setupDomElement.cloneNode();
  ...
}

И при компиляции получаю ошибку:

Код:
../mytetra/src/models/recordTable/Record.cpp: In copy constructor 'Record::Record(const Record&)':
../mytetra/src/models/recordTable/Record.cpp:42:18: error: no match for 'operator=' (operand types are 'QDomElement' and 'QDomNode')
   setupDomElement=obj.setupDomElement.cloneNode();
                  ^
../mytetra/src/models/recordTable/Record.cpp:42:18: note: candidate is:
In file included from /media/wd_640_part_2/opt/Qt_5_4_2/5.4/gcc/include/QtXml/QDomElement:1:0,
                 from ../mytetra/src/models/recordTable/Record.cpp:3:
/media/wd_640_part_2/opt/Qt_5_4_2/5.4/gcc/include/QtXml/qdom.h:470:18: note: QDomElement& QDomElement::operator=(const QDomElement&)
     QDomElement& operator= (const QDomElement&);
                  ^
/media/wd_640_part_2/opt/Qt_5_4_2/5.4/gcc/include/QtXml/qdom.h:470:18: note:   no known conversion for argument 1 from 'QDomNode' to 'const QDomElement&'
Makefile:23058: recipe for target 'build/Record.o' failed
make: *** [build/Record.o] Error 1
22:03:31: Процесс «/usr/bin/make» завершился с кодом 2.

Насколько я понял, метод cloneNode() возвращающий QDomNode, не может примениться к obj.setupDomElement, так как obj имеет тип const QDomElement&.

Я попробовал сделать прототип конструктора копирования без const, но тогда не проходит компиляция в других местах, и я бы не хотел их трогать.

Вопрос. Как обойти сию проблему, и сделать глубокую копию QDomElement в конструкторе копирования?