Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Модель/Представление _ Свое творение на тему свойств что ли выложить?

Автор: Swappp 26.11.2007, 16:38

Свое творение на тему свойств что ли выложить? :) У меня модель, которая читает свойства прямо от QObject, которые помечены флагом USER. Правда это мой первый опыт общения с моделями, по этому не уверен, что все правильно, но вроде работает... Вложенные свойства реализуются путем объявления свойства типа QObject*, и соответственно выводятся все свойства этого объекта, при этом важно, что бы была правильная иерархия самих объектов.

Автор: Admin 26.11.2007, 16:41

Ну раз понеслась такая пьянка, выкладывай! :)
Только незабудь про описание, указать авторство и желательно скриншет.

Тогда тему снова разделю, и выложу на сайте...
Чувствуется нужно будет реализовывать функционал похожий на codeproject!

Автор: Inilika 28.11.2007, 20:18

Цитата(Swappp @ 26.11.2007, 17:38) *
Свое творение на тему свойств что ли выложить? :) У меня модель, которая читает свойства прямо от QObject, которые помечены флагом USER. Правда это мой первый опыт общения с моделями, по этому не уверен, что все правильно, но вроде работает... Вложенные свойства реализуются путем объявления свойства типа QObject*, и соответственно выводятся все свойства этого объекта, при этом важно, что бы была правильная иерархия самих объектов.
Ждем-с. :rolleyes:

Автор: Swappp 29.11.2007, 1:43

Вот что получилось. В комплекте класс PropertiesModel и PropertiesDelegate и простой пример. Первый - модель, второй - делегат, в который добавлен выпадающей список для enum'ов. При создании модели, в конструктор передается объект, свойства которого надо изменять и отображать. Свойства соответственно описываются стандартным для Qt образом с обязательным указанием флага USER. Для реализации вложенных свойств создается ReadOnly свойство типа QObject*, который хранит указатель на другой объект со свойствами. Для использование свойств типа enum, надо соответствующий enum объявить с помощью Q_ENUMS.
Пока есть две проблемы:
1. На сколько критично правильное число строк выдаваемое rowCount()? На текущей момент выдается число всех свойств, а индексы создаются только для свойств с флагом USER.
2. Есть некоторые проблемы с вложенными свойствами. По задаче, для которой я это делал, требуется, при изменении одного из параметров заменять объект в одном из свойств на новый, возможно другого типа. Так вот, если есть только один уровень вложенности, то проблем не возникает, просто при изменении любого параметра генерируется сигнал layoutChanged, а при большем уровне вложенности (когда все открыто), все вылетает... Есть вариант все сворачивать, но это не очень удобно... Так же можно попробовать вообще запретить пользователю сворачивание, и тогда все сворачивать перед изменением и разворачивать после.

 properties_0.1.tar.gz ( 2.75 килобайт ) : 509
 

Автор: Admin 29.11.2007, 13:36

Выложил: http://crossplatform.ru/?q=node/384

 

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)