Russian Qt Forum
Май 03, 2024, 11:01 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Меняет ли метод createElement() объект QDomDocument() ?  (Прочитано 2773 раз)
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« : Август 22, 2015, 01:25 »

У меня несколько классов, объекты последующего включены в объект текущего, грубо говоря:

- Корень
- Ветка
- Таблица записей в ветке
- Запись
- Таблица аттачей в записи
- Аттач

И вот у каждого такого класса есть метод exportDataToDom().

Методы эти вызываются по цепочке в глубину, и в конце концов формируется корневой QDomDocument.

Каждый метод принимает в параметре корневой объект QDomDocument, который нужен чтобы создать QDomElement. Если не знать корневого QDomDocument, то отдельно созданный QDomElement невозможно прилепить ни к QDomDocument, ни к QDomElement. Вот такая особенность DOM-модели в Qt.

Поэтому приходится тягать в глубины всех методов корневой QDomDocument. Я сейчас использую примерно такой код в методах exportDataToDom():

Код:
QDomElement Record::exportDataToDom(QDomDocument doc) const
{
  QDomElement elem=doc.createElement("record");

  ...

  QDomElement att=attachTable.exportDataToDom(doc); // Проброс doc далее

  elem.appendChild( att );

  ...
}

Учитывая, что QDomDocument является Implicit Sharing объектом, то такой проброс должен приводить только к передачи указателя.

Но! Можно заметить, что в каждом методе exportDataToDom() есть команда вида:

Код:
doc.createElement("...");

Так вот я не пойму, эта команда меняет объект doc или нет? Если меняет, то у меня будут множиться эти QDomDocument как грибы после дождя.

То есть, я хочу узнать, может быть стоит передавать таки указатель на QDomDocument, вот так:

Код:
QDomElement Record::exportDataToDom(QDomDocument *doc) const
Записан

Собираю информацию по крупицам
http://webhamster.ru
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.126 секунд. Запросов: 22.