Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Property browser
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Модель/Представление
0xFF
День добрый :)

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

Готового решения кроме как в Qt Solutions я не видел.
ViGOur
Вот есть статья как создать свой The Property Browser Framework

Думаю по ней, будет понятно, с чего начать...
Гость
Хорошо, задам конкретный вопрос :) Можно ли в QTreeWidget вставлять вместо текста виджеты? Т.е. имеем две колонки(Property, Value) в колонке Property - имя свойства, а в колонке Value - виджет в зависимости от типа свойства(combo box, spin box и т.д.). Такое возможно? И как это сделать?
Гость
Так, вопрос с виджетами снят, все оказалось проще чем я думал :). Теперь не могу скрыть полоски которые показывают иерархию(не знаю даже как их назвать :)), находятся слева от дерева, хочу оставить только крестики рядом с разворачивающемися элементами...
ViGOur
Может QTreeWidgetItem::setChildIndicatorPolicy c параметром? Просто по умолчанию устанавливается QTreeWidgetItem::ShowForChildren, можно попробовать с QTreeWidgetItem::DontShowIndicatorWhenChildless
ViGOur
А вообще, я где-то видел на vb + qt реализацию property browser, поискать нужно только, как пример как что реализовать думаю подойдет.
Гость
Не помогло. Вообще ничего не происходит с любыми параметрами :(. Написал setRootIsDecorated( false ), но теперь не видно даже крестиков перед разворачивающемися элементами =\
ViGOur
Нашел пример: Value Browser 3.

Ща гляну, что там с полосками...
Гость
Классный пример :) Только вот судя по скрину у них тоже есть эти вертикальные соеденители элементов =(
ViGOur
Угу, я тоже это заметил :)
У меня пока комп чистый, Qt пока не скомпилил, как скомпилю попробую как и что, а то так пока не понятно как и что. :(
Гость
Что-то мне кажется, что от вертикальных линий не избавиться =(.

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

из примера Value Browser 3.
Гость
setItemDelegate установит делегат для всех элементов, а мне нужно только для тех, которые свойства группируют
ViGOur
Этот вопрос тоже требует времени для ответа, пока не знаю как... :) Но интересно узнать.

Но если грубо, то можно для каждой группы сделать свой виджет QTreeWidget и для него вызывать setItemDelegate, но думаю есть более красивый способ.
Гость
Может можно как-то по-другому заменить код отрисовки элементов?
ViGOur
С линиями, думаю, можно обычной вставкой иконок для рутовых эелементов.
А вот с setItemDelegate пока не знаю, буду смотреть...
Admin
Цитата(Гость @ 11.11.2007, 17:21) *
Можно ли присвоить отдельным элементам различные QItemDelegate? И как? Просто не знаю как по-другому нарисовать группы, хочу группировать с-ва в группы, а заголовок группы рисовать, например, с серым фоном(как на скрине)

void QAbstractItemView::setItemDelegateForRow ( int row, QAbstractItemDelegate * delegate )
или
void QAbstractItemView::setItemDelegateForColumn ( int column, QAbstractItemDelegate * delegate )

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

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

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

Вот ещё метод :) http://doc.trolltech.com/4.3/stylesheet-examples.html в самом конце
0xF
>>Если доделаешь, то может выложишь исходники? Я их на сайт повешу.
ОК :) У меня уже есть рабочий вариант, но я ещё хочу немного доработать функционал :)
ViGOur
Цитата(Гость @ 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
Давненько меня тут не было :)

Вобщем сделал я Property Grid, заточенный под мои нужды, правда, немного порочный :) Если надо, могу выложить код, только куда?
ViGOur
А качестве аттача сюда можно выложить... :)
0xF
// ** Пример использования
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;


Код
Нажмите для просмотра прикрепленного файла
ViGOur
Цитата(Admin @ 12.11.2007, 14:45) *
p.s. если решишь выложить, то авторство укажи. :)
;)
Admin
спасибо, выложу...
Admin
Выложил: Property browser
Admin
Тему разделил, сообщения перенесены в новую тему: Property Browser (PropertySheet)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2020 IPS, Inc.