День добрый
Пишу программу, очень нужен property browser, кто-нибудь реализовывал такой компонент на Qt? С чего начать? Видел такой в Qt Solutions, но они не дают его даже для разработки некоммерческой/open-source проги ( Думал может кто-нить в сети расшарил(все равно никакой коммерческой выгоды с проги не буду иметь, да и для себя пишу ) - тоже нету . Один выход - писать самому... может кто поможет чем-нить?
В чем именно проблема, в реализации?
Просто одно дело, когда есть какие-то проблема при реализации, другое, когда ищешь готовое решение.
Готового решения кроме как в Qt Solutions я не видел.
Вот есть статья как создать свой http://www.crossplatform.ru/?q=node/299
Думаю по ней, будет понятно, с чего начать...
Хорошо, задам конкретный вопрос Можно ли в QTreeWidget вставлять вместо текста виджеты? Т.е. имеем две колонки(Property, Value) в колонке Property - имя свойства, а в колонке Value - виджет в зависимости от типа свойства(combo box, spin box и т.д.). Такое возможно? И как это сделать?
Так, вопрос с виджетами снят, все оказалось проще чем я думал . Теперь не могу скрыть полоски которые показывают иерархию(не знаю даже как их назвать ), находятся слева от дерева, хочу оставить только крестики рядом с разворачивающемися элементами...
Может http://crossplatform.ru/documentation/qtdoc4.3/qtreewidgetitem.php#setChildIndicatorPolicy c параметром? Просто по умолчанию устанавливается QTreeWidgetItem::ShowForChildren, можно попробовать с QTreeWidgetItem::DontShowIndicatorWhenChildless
А вообще, я где-то видел на vb + qt реализацию property browser, поискать нужно только, как пример как что реализовать думаю подойдет.
Не помогло. Вообще ничего не происходит с любыми параметрами . Написал setRootIsDecorated( false ), но теперь не видно даже крестиков перед разворачивающемися элементами =\
Нашел пример: http://sourceforge.net/projects/vbrowser/.
Ща гляну, что там с полосками...
Классный пример Только вот судя по скрину у них тоже есть эти вертикальные соеденители элементов =(
Угу, я тоже это заметил
У меня пока комп чистый, Qt пока не скомпилил, как скомпилю попробую как и что, а то так пока не понятно как и что.
Что-то мне кажется, что от вертикальных линий не избавиться =(.
Можно ли присвоить отдельным элементам различные QItemDelegate? И как? Просто не знаю как по-другому нарисовать группы, хочу группировать с-ва в группы, а заголовок группы рисовать, например, с серым фоном(как на скрине)
setItemDelegate(new TValueItemDelegate(this)); ???
из примера Value Browser 3.
setItemDelegate установит делегат для всех элементов, а мне нужно только для тех, которые свойства группируют
Этот вопрос тоже требует времени для ответа, пока не знаю как... Но интересно узнать.
Но если грубо, то можно для каждой группы сделать свой виджет QTreeWidget и для него вызывать setItemDelegate, но думаю есть более красивый способ.
Может можно как-то по-другому заменить код отрисовки элементов?
С линиями, думаю, можно обычной вставкой иконок для рутовых эелементов.
А вот с setItemDelegate пока не знаю, буду смотреть...
Чтобы не рисовались линии, тебе нужно переопределить:
void QTreeView::drawBranches(QPainter *painter, const QRect &rect, const QModelIndex &index) const;
Если у тебя не получиться, то как время будет покажу как...
Admin
ViGOur
Спасибо! Щас буду пробовать
Если доделаешь, то может выложишь исходники? Я их на сайт повешу.
Просто сейчас намечаю раздельчик в котором будут лежать исходики и краткое описание к ним...
p.s. если решишь выложить, то авторство укажи.
ViGOur
>>Чтобы не рисовались линии, тебе нужно переопределить:
>>void QTreeView::drawBranches(QPainter *painter, const QRect &rect, const QModelIndex &index) const;
Вот ещё метод http://doc.trolltech.com/4.3/stylesheet-examples.html в самом конце
>>Если доделаешь, то может выложишь исходники? Я их на сайт повешу.
ОК У меня уже есть рабочий вариант, но я ещё хочу немного доработать функционал
Давненько меня тут не было
Вобщем сделал я Property Grid, заточенный под мои нужды, правда, немного порочный Если надо, могу выложить код, только куда?
А качестве аттача сюда можно выложить...
// ** Пример использования
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;
спасибо, выложу...
Выложил: http://crossplatform.ru/?q=node/382
Тему разделил, сообщения перенесены в новую тему: http://www.forum.crossplatform.ru/index.php?showtopic=103
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)