Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: break от Декабрь 08, 2009, 19:19



Название: Вложенные поля в дизайнере для кастомного виджета
Отправлено: break от Декабрь 08, 2009, 19:19
Когда-то уже поднимал эту тему - ответа не нашел

Что хочется:

Есть свой виджет - оформлен как плагин для дизайнера, его полями являются некоторые структуры тоже состоящие из полей!

Наприме все вы видели как распахивается в инспекторе объектов дизайнера подполя для поля с типом QFont - прилагаю рисунок.

Вопрос - как сделать в своем виджете такое - и получалось ли у кого нибудь? В свое время и бился бился но безрезультатно - а количество подполей тем временем у этого виджета увеличилось- и работать с ними становится все труднее - когда они не вложены друг в друга...
Хотя бы на 1 уровень вложенности перенести их...


Название: Re: Вложенные поля в дизайнере для кастомного виджета
Отправлено: SABROG от Декабрь 08, 2009, 23:09
Обычный QTreeView. Или я прикола не понял.


Название: Re: Вложенные поля в дизайнере для кастомного виджета
Отправлено: break от Декабрь 09, 2009, 00:34
Цитировать
Обычный QTreeView. Или я прикола не понял.
Не понял естественно - мне нужно чтобы в дизайнере в его View-е мой компонент так красиво разворачивался!
В делфи при написании своих компонент - это легко работало - достаточно было в своей структуре также объявить подпроперти - здесь нет...


Название: Re: Вложенные поля в дизайнере для кастомного виджета
Отправлено: lit-uriy от Декабрь 09, 2009, 01:08
Можно посмотреть на плагины Qwt, там есть вложенные поля, хотя они больше стандартные, а не пользовательские.
См. рисунок.
Это компонент QwtThermo


Название: Re: Вложенные поля в дизайнере для кастомного виджета
Отправлено: break от Декабрь 09, 2009, 01:42
QBrush и QColor и у меня работают - также QFont и т.д. --- мне как раз нужно свою структуру заставить так в качестве поля разворачиваться -странно что больше никому такое не требовалось, для визуальных компонент....

Може теще какая нибудь библиотека есть где все таки была своя (не Qt-ешная структура) так заполнена...
--- о блин похоже в QwtPlot что то подобное сделано... буду смотреть и разбираться...
Оказалось обычный опять же стандартный QString :(



Название: Re: Вложенные поля в дизайнере для кастомного виджета
Отправлено: lit-uriy от Декабрь 09, 2009, 03:27
break, а у тебя собственная структура (тип) зарегистрирована в системе типов?


Название: Re: Вложенные поля в дизайнере для кастомного виджета
Отправлено: break от Декабрь 09, 2009, 03:40
пробовал регистрировать так - не помогате... не появляется вообще проперти в дизайнере

Код:
#include <QMetaType>

struct Q_DECL_EXPORT CMyTestStruct
{
int m_A;
int m_B;
int m_C;
CMyTestStruct() {}
};

Q_DECLARE_METATYPE( CMyTestStruct );

в самом классе объявлено так:

Код:
	CMyTestStruct m_test;

Q_PROPERTY( CMyTestStruct test   READ getTest   WRITE setTest );
Q_PROPERTY( int test2   READ getTest2   WRITE setTest2 );

public:
.............................
inline CMyTestStruct  getTest() const { return m_test; }
void   setTest( CMyTestStruct test ) { m_test = test; }

inline int  getTest2() const { return 555; }
void   setTest2( int nVal ) { }

Поле test2 - которое стандартного типа int появляется и работает(аналогично работаю QFont, QString и т.д.) - поле test - которое типа CMyTestStruct не появляется в дизайнере вообще... - рисунок прилагаю

Терзают смутные сомнения что прийдется использовать вот это: QDesignerPropertySheetExtension -- найти бы рабочий пример использования, чтобы время съэкономить и понять оно или не оно... Не понятно из документации оно может только манипулировать уже существующими пропертями в дизайнере - или может создать новое проперти??? что будет если в метод indexOf передать имя несуществующего проперти - наверняка вернет "-1" - а других ф-ций типа addProperty - в этом интерфейсе управления дизайнером нет - врят ли подойдет...


Название: Re: Вложенные поля в дизайнере для кастомного виджета
Отправлено: SABROG от Декабрь 09, 2009, 13:49
Вот тролль отвечает, что подобный функционал в план не входит: http://lists.trolltech.com/pipermail/qt-interest/2009-July/010659.html

Тут вообще речь о пользовательских типах в дизайнере, а уж о том, чтобы их еще как-то на подветки разбивать так это вы поторопились.

Кстати 2 файлика интересных:
tools\designer\src\lib\shared\qdesigner_propertycommand.cpp
tools\designer\src\lib\uilib\properties.cpp


Название: Re: Вложенные поля в дизайнере для кастомного виджета
Отправлено: Dendy от Декабрь 09, 2009, 14:59
Код:
struct Q_DECL_EXPORT CMyTestStruct

Кстати, Q_DECL_EXPORT нельзя использовать в явном виде. Должен быть какой-то макрос, ссылающийся на него или на Q_DECL_IMPORT, в зависимости импортируете или экспортируете ли вы библиотеку. Но в данном случае это не критично, ибо заголовочник больше нигде как создании библиотеки не учавствует.