Russian Qt Forum

Qt => Общие вопросы => Тема начата: Igors от Ноябрь 04, 2013, 14:53



Название: QObject dynamic property
Отправлено: Igors от Ноябрь 04, 2013, 14:53
Добрый день

Верно ли я понял что:

- сам QObject (и его потомки) не могут храниться как dynamic property (setProperty и.т.д.) т.к. значение QVariant. Разрешается хранить только  указатель (QObject *)

- при удалении такой проперди объект не удаляется автоматом, я должен обеспечить сам (напр пройдясь по всем пропердям)

Спасибо


Название: Re: QObject dynamic property
Отправлено: LisandreL от Ноябрь 05, 2013, 11:58
- сам QObject (и его потомки) не могут храниться как dynamic property (setProperty и.т.д.) т.к. значение QVariant. Разрешается хранить только  указатель (QObject *)
Потомки могут храниться в QVariant, но нужен конструктор копирования (храниться будет копия).
Ну и Q_DECLARE_METATYPE надо будет указать.


Название: Re: QObject dynamic property
Отправлено: Igors от Ноябрь 05, 2013, 19:51
Потомки могут храниться в QVariant, но нужен конструктор копирования (храниться будет копия).
Ну и Q_DECLARE_METATYPE надо будет указать.
Да, если выполнить эти правила - то компиляция проходит. Но что мне делать в конструкторе копирования (ведь присвоить базовый QObject я не могу)?

Спасибо

Edit: может в конструкторе копирования сначала позвать обычный конструктор, а потом копировать из аргумента "что можно". Если ли др возможности?


Название: Re: QObject dynamic property
Отправлено: navrocky от Ноябрь 06, 2013, 10:05
Положи QObject в QSharedPointer, тогда, хотя-бы, удалять руками не будешь. При этом важно отследить, чтобы родитель QObject не убил объект раньше чем это сделает QSharedPointer.


Название: Re: QObject dynamic property
Отправлено: LisandreL от Ноябрь 06, 2013, 10:21
может в конструкторе копирования сначала позвать обычный конструктор, а потом копировать из аргумента "что можно". Если ли др возможности?
Обычный конструктор QObject (ну или другого родителя) я так понимаю? Ну хотя если у вас C++11, то можно и делегирующий конструктор использовать.
А так да, кроме копирования полей вручную тут особо ничего не сделаешь.
Ну разве что класс реализует implicitly share (через QSharedDataPointer и QSharedData, например), тогда копирование будет проще, но всё остальное сложнее. :) По сути это будет обёртка для умного указателя.



Название: Re: QObject dynamic property
Отправлено: Igors от Ноябрь 06, 2013, 13:39
Родителей нет, проперди используются как данные-переменные для скритпов (не виджеты). С умными указателями здесь вроде больше мороки чем пользы (напр а кто тот "хотя бы 1 использующий" - хз). Дадно, добавил в деструктор проход по пропердям с удалением указателкй на QObject. Поскольку проперди в виде дерева - "достаточно одной таблэтки".

Спасибо