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

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

Форум на CrossPlatform.RU _ Qt Модель/Представление _ Property browser

Автор: 0xFF 9.11.2007, 21:32

День добрый :)

Пишу программу, очень нужен property browser, кто-нибудь реализовывал такой компонент на Qt? С чего начать? Видел такой в Qt Solutions, но они не дают его даже для разработки некоммерческой/open-source проги :(( Думал может кто-нить в сети расшарил(все равно никакой коммерческой выгоды с проги не буду иметь, да и для себя пишу :) ) - тоже нету :(. Один выход - писать самому... может кто поможет чем-нить? :)

Автор: ViGOur 9.11.2007, 22:02

В чем именно проблема, в реализации?
Просто одно дело, когда есть какие-то проблема при реализации, другое, когда ищешь готовое решение.

Готового решения кроме как в Qt Solutions я не видел.

Автор: ViGOur 9.11.2007, 22:32

Вот есть статья как создать свой http://www.crossplatform.ru/?q=node/299

Думаю по ней, будет понятно, с чего начать...

Автор: Гость 11.11.2007, 14:06

Хорошо, задам конкретный вопрос :) Можно ли в QTreeWidget вставлять вместо текста виджеты? Т.е. имеем две колонки(Property, Value) в колонке Property - имя свойства, а в колонке Value - виджет в зависимости от типа свойства(combo box, spin box и т.д.). Такое возможно? И как это сделать?

Автор: Гость 11.11.2007, 14:45

Так, вопрос с виджетами снят, все оказалось проще чем я думал :). Теперь не могу скрыть полоски которые показывают иерархию(не знаю даже как их назвать :)), находятся слева от дерева, хочу оставить только крестики рядом с разворачивающемися элементами...

Автор: ViGOur 11.11.2007, 15:33

Может http://crossplatform.ru/documentation/qtdoc4.3/qtreewidgetitem.php#setChildIndicatorPolicy c параметром? Просто по умолчанию устанавливается QTreeWidgetItem::ShowForChildren, можно попробовать с QTreeWidgetItem::DontShowIndicatorWhenChildless

Автор: ViGOur 11.11.2007, 15:53

А вообще, я где-то видел на vb + qt реализацию property browser, поискать нужно только, как пример как что реализовать думаю подойдет.

Автор: Гость 11.11.2007, 15:57

Не помогло. Вообще ничего не происходит с любыми параметрами :(. Написал setRootIsDecorated( false ), но теперь не видно даже крестиков перед разворачивающемися элементами =\

Автор: ViGOur 11.11.2007, 16:09

Нашел пример: http://sourceforge.net/projects/vbrowser/.

Ща гляну, что там с полосками...

Автор: Гость 11.11.2007, 16:33

Классный пример :) Только вот судя по скрину у них тоже есть эти вертикальные соеденители элементов =(

Автор: ViGOur 11.11.2007, 16:37

Угу, я тоже это заметил :)
У меня пока комп чистый, Qt пока не скомпилил, как скомпилю попробую как и что, а то так пока не понятно как и что. :(

Автор: Гость 11.11.2007, 17:21

Что-то мне кажется, что от вертикальных линий не избавиться =(.

Можно ли присвоить отдельным элементам различные QItemDelegate? И как? Просто не знаю как по-другому нарисовать группы, хочу группировать с-ва в группы, а заголовок группы рисовать, например, с серым фоном(как на скрине)

Автор: ViGOur 11.11.2007, 17:27

setItemDelegate(new TValueItemDelegate(this)); ???

из примера Value Browser 3.

Автор: Гость 11.11.2007, 17:41

setItemDelegate установит делегат для всех элементов, а мне нужно только для тех, которые свойства группируют

Автор: ViGOur 11.11.2007, 20:04

Этот вопрос тоже требует времени для ответа, пока не знаю как... :) Но интересно узнать.

Но если грубо, то можно для каждой группы сделать свой виджет QTreeWidget и для него вызывать setItemDelegate, но думаю есть более красивый способ.

Автор: Гость 11.11.2007, 20:28

Может можно как-то по-другому заменить код отрисовки элементов?

Автор: ViGOur 11.11.2007, 23:35

С линиями, думаю, можно обычной вставкой иконок для рутовых эелементов.
А вот с setItemDelegate пока не знаю, буду смотреть...

Автор: Admin 12.11.2007, 9:15

Цитата(Гость @ 11.11.2007, 17:21) *
Можно ли присвоить отдельным элементам различные QItemDelegate? И как? Просто не знаю как по-другому нарисовать группы, хочу группировать с-ва в группы, а заголовок группы рисовать, например, с серым фоном(как на скрине)

http://www.crossplatform.ru/documentation/qtdoc4.3/qabstractitemview.php#setItemDelegateForRow
или
http://www.crossplatform.ru/documentation/qtdoc4.3/qabstractitemview.php#setItemDelegateForColumn

на выбор :)

Автор: ViGOur 12.11.2007, 10:05

Чтобы не рисовались линии, тебе нужно переопределить:
void QTreeView::drawBranches(QPainter *painter, const QRect &rect, const QModelIndex &index) const;

Если у тебя не получиться, то как время будет покажу как...

Автор: Гость 12.11.2007, 14:41

Admin
ViGOur
Спасибо! Щас буду пробовать :)

Автор: Admin 12.11.2007, 14:45

Если доделаешь, то может выложишь исходники? Я их на сайт повешу.
Просто сейчас намечаю раздельчик в котором будут лежать исходики и краткое описание к ним... :)

p.s. если решишь выложить, то авторство укажи. :)

Автор: Гость 12.11.2007, 15:58

ViGOur
>>Чтобы не рисовались линии, тебе нужно переопределить:
>>void QTreeView::drawBranches(QPainter *painter, const QRect &rect, const QModelIndex &index) const;

Вот ещё метод :) http://doc.trolltech.com/4.3/stylesheet-examples.html в самом конце

Автор: 0xF 12.11.2007, 16:02

>>Если доделаешь, то может выложишь исходники? Я их на сайт повешу.
ОК :) У меня уже есть рабочий вариант, но я ещё хочу немного доработать функционал :)

Автор: ViGOur 12.11.2007, 16:34

Цитата(Гость @ 12.11.2007, 15:58) *
ViGOur
>>Чтобы не рисовались линии, тебе нужно переопределить:
>>void QTreeView::drawBranches(QPainter *painter, const QRect &rect, const QModelIndex &index) const;

Вот ещё метод :) http://doc.trolltech.com/4.3/stylesheet-examples.html в самом конце
Мда, а о таблицах стилей я не подумал, хотя перевожу их... :)

Автор: 0xF 24.11.2007, 16:12

Давненько меня тут не было :)

Вобщем сделал я Property Grid, заточенный под мои нужды, правда, немного порочный :) Если надо, могу выложить код, только куда?

Автор: ViGOur 24.11.2007, 17:39

А качестве аттача сюда можно выложить... :)

Автор: 0xF 24.11.2007, 18:14

// ** Пример использования
class cSomeClass {
private:

    float         fProperty;
    int           iProperty;
    float         vProperty[2]; // двухмерный вектор
    byte          cProperty[4]; // цвет
    std::string   sProperty;
    bool          bProperty;

    ...

public:
    ...
    // ** Основной порок - кривоватая система для описания свойств объекта, не было времени сделать что-нить более толковое :)
    QPropertyGrid::sPropertyDef* CreatePropertyDef( void ) {
         QPropertyGrid::sPropertyDef *def = new QPropertyGrid::sPropertyDef[ 7 ];

         def[0].name   = "Float property";
         def[0].type     = QPropertyGrid::T_FLOAT;
         def[0].pointer = &fProperty;
         def[0].minf     = -10.0f;
         def[0].maxf    = 10.0f;

         def[1].name   = "Int property";
         def[1].type     = QPropertyGrid::T_INT;
         def[1].pointer = &iProperty;

         def[2].name   = "2D Vector";
         def[2].type     = QPropertyGrid::T_VECTOR2;
         def[2].pointer = vProperty;
         memcpy( def[2].captions.xCaption, "min", 4 );   // ** Это вообще жуть :)
         memcpy( def[2].captions.yCaption, "max", 4 );

         def[3].name   = "Color property";
         def[3].type     = QPropertyGrid::T_COLOR;
         def[3].pointer = cProperty;

         def[4].name   = "String property";
         def[4].type     = QPropertyGrid::T_STRING;
         def[4].pointer = &sProperty;

         def[5].name   = "Bool property";
         def[5].type     = QPropertyGrid::T_BOOL;
         def[5].pointer = &bProperty;

         def[6].type     = QPropertyGrid::T_TOTAL; // Конец описания
    }

    ...
};

// ** Собственно связывание QPropertyGrid с объектом
QPropertyGrid:::sPropertyDef *def = someClassObject->CreatePropertyDef();
propertyGrid->SetObject( def );

delete[]def;


Код
 QPropertyGrid.zip ( 8.78 килобайт ) : 665

Автор: ViGOur 24.11.2007, 18:42

Цитата(Admin @ 12.11.2007, 14:45) *
p.s. если решишь выложить, то авторство укажи. :)
;)

Автор: Admin 24.11.2007, 19:08

спасибо, выложу...

Автор: Admin 24.11.2007, 19:46

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

Автор: Admin 26.11.2007, 14:08

Тему разделил, сообщения перенесены в новую тему: http://www.forum.crossplatform.ru/index.php?showtopic=103

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