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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Q_PROPERTY + QList + Designer plugin  (Прочитано 6560 раз)
ZeroTroll
Гость
« : Апрель 11, 2010, 12:41 »

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

С простыми типами свойств проблем нет:
Код:
int _currentIndex;
Q_PROPERTY(int currentIndex READ currentIndex WRITE setCurrentIndex USER true)

const int currentIndex() const;
const bool setCurrentIndex(const int _currentIndex);
В приведенном примере все прекрасно, свойство currentIndex появляется в редакторе свойств и я без проблем могу его задавать.

А вот с QList у меня проблемы. К примеру такой код:
Код:
QList<int> _glyphOrder;
Q_PROPERTY(QList<int> glyphOrder READ glyphOrder WRITE setGlyphOrder USER true STORED true DESIGNABLE true)
const QList<int> glyphOrder() const;
const bool setGlyphOrder(const QList<int>& _glyphOrder);
Ни в какую не срабатывает, свойство glyphOrder не появляется.
Прошерстив просторы интернета перепробовал кучу вариантов, но результата так и не добился.

Пробовал и QList<QVariant> и QValueList. Не выходит.

Но то, что в дизайнере можно в качестве свойств представлять QList<int>  уверен на 100%, ибо сам видел у какого-то виджета. Пробовал искать реализацию в исходниках Qt, но так и не нашел, ибо не помню что за виджет.

Подскажите как быть в этой ситуации. Как заставить designer отображать в редакторе свойств QList и QMap.

Неужели придется писать свое расширение для designer чтобы реализовать этот функционал?

Спасибо.
Записан
ZeroTroll
Гость
« Ответ #1 : Апрель 11, 2010, 12:59 »

Кстати, если вместо QList<int> написать QStringList - то все прекрасно срабатывает.
Записан
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #2 : Апрель 11, 2010, 13:23 »

Не помню стандартных виджетов с QList или QMap в инспекторе свойств - вроде как раз через расширения делаются...(щелкаем например по комбо боксу и уже из менб выбираем редактировать итемы)

И кстати однажды тоже искал решение проблемы создания сложных, разворачивающихся свойств (типа QFont и т.д.)  - вроде его пока нет...

http://www.prog.org.ru/topic_6612_0.html

Если вам удасться на что нибудь наткнуться отпишитесь плиз!
Записан
SASA
Гость
« Ответ #3 : Апрель 11, 2010, 20:49 »

Стандартный проперти эдитор поддерживает не много типов. Для других типов надо изменять его исходники. Там смысл такой, эдитор спрашивает у проперти тип. Если он знает, чё за тип он вставляет контрол для его редактирования. Если не знает, то ничего не делает. 
Записан
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #4 : Апрель 11, 2010, 21:02 »

Да это все к сожалению! - в этом плане в Delphi легко решалась проблема - вставил подобъект в объект и он уже в инспекторе виден как полноценный подобъект, все свойства по плюсику разворачиваются и т.д.
Записан
ZeroTroll
Гость
« Ответ #5 : Апрель 12, 2010, 12:26 »

Значит надо писать расширения дизайнера для редактирования кастомного типа данных.
Это точно возможно, сам  видел.

Но прошерстив индерфейсы в модуле Qt Designer так ничего дельного и не нашел.

Подскажите с чего начать для написания расширение дизайнера для редактора свойств произвольных типов.
Записан
ZeroTroll
Гость
« Ответ #6 : Апрель 13, 2010, 11:40 »

Ну хорошо.

Я написал TaskMenuExtension, или как-то так.

Там все устанавливаю и редактирую. Но вот проблема - чтобы сохранить состояние виджета надо выхвать метод setProperty, который принимает только QVariant.

А состояние моего объекта описывается не QVariant.

Есть ли возможность из TaskMenuExtension сохранить состояние объекта, запомнить вызываемые методы и т.п. Без использования Q_PROPERTY.
Записан
SASA
Гость
« Ответ #7 : Апрель 13, 2010, 13:45 »

В  QVariant можно записать всё что угодно. В асистанте написано как.
Записан
ритт
Гость
« Ответ #8 : Май 01, 2010, 19:42 »

ZeroTroll, будь добр, приложи потом исходники - сильно упростит задачу следующему, кто столкнётся с подобной проблемой
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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