Название: 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, но нужен конструктор копирования (храниться будет копия). Да, если выполнить эти правила - то компиляция проходит. Но что мне делать в конструкторе копирования (ведь присвоить базовый QObject я не могу)?Ну и Q_DECLARE_METATYPE надо будет указать. Спасибо 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. Поскольку проперди в виде дерева - "достаточно одной таблэтки".
Спасибо |