Название: QListWidgetItem переменного размера. Отправлено: ksk- от Ноября 07, 2011, 04:40 Всем привет. Уже несколько дней не могу решить одну проблему. Есть объект QListWidget, каждый item которого есть виджет, на виджете есть кнопка, при нажатии на которую виджет увеличивается в размере. Я хочу, чтобы соответствующий item так же увеличивался и все нормально отображалось. Прошу подсказать мне хоть что-нибудь. Заранее благодарен.
Название: Re: QListWidgetItem переменного размера. Отправлено: ecspertiza от Ноября 07, 2011, 11:49 Пока не совсем понятно в чем проблема то :) Можно задать MinimumSize для виджета на котором кликаешь кнопку, можно лайоутами рулить, в чем загвоздка то ?
Название: Re: QListWidgetItem переменного размера. Отправлено: Drafter от Ноября 07, 2011, 21:22 Нужно делать своего делегата (унаследовамшись от QItemDelegate) и перегружать в нём виртуальный метод sizeHint(...).
Название: Re: QListWidgetItem переменного размера. Отправлено: ksk- от Ноября 08, 2011, 20:24 Пока не совсем понятно в чем проблема то :) Можно задать MinimumSize для виджета на котором кликаешь кнопку, можно лайоутами рулить, в чем загвоздка то ? Я так пробовал, но размеры айтема не менялись. В PyQt проблема решалась созданием нового класса, наследуюещегося от QListWidgetItem. Но когда я пытался проделать подобное на С++, то компилятор ругается на макрос "Q_OBJECT". Но ведь без него не будет работать механизм слотов и сигналов. Название: Re: QListWidgetItem переменного размера. Отправлено: ksk- от Ноября 08, 2011, 20:28 Нужно делать своего делегата (унаследовамшись от QItemDelegate) и перегружать в нём виртуальный метод sizeHint(...). С делегатами я еще дело не имел. Я, конечно, могу ошибаться, но мне кажется, что получится слишком много кода для такой "простой" задачи. Название: Re: QListWidgetItem переменного размера. Отправлено: ksk- от Ноября 08, 2011, 20:35 Вот пример кода на Python'е:
Код
Как бы подобное на C++ сделать? Название: Re: QListWidgetItem переменного размера. Отправлено: kambala от Ноября 08, 2011, 22:16 попробуй объявить класс так:
Код
Название: Re: QListWidgetItem переменного размера. Отправлено: ksk- от Ноября 09, 2011, 15:31 попробуй объявить класс так: Код
Так делал, выдает следующее: moc_item.cpp:41:8: error: ‘staticMetaObject’ is not a member of ‘QListWidgetItem’ moc_item.cpp: In member function ‘virtual void* Item::qt_metacast(const char*)’: moc_item.cpp:61:12: error: ‘qt_metacast’ is not a member of ‘QListWidgetItem’ moc_item.cpp: In member function ‘virtual int Item::qt_metacall(QMetaObject::Call, int, void**)’: moc_item.cpp:66:11: error: ‘qt_metacall’ is not a member of ‘QListWidgetItem’ moc_item.cpp: In member function ‘virtual void* Item::qt_metacast(const char*)’: moc_item.cpp:62:1: warning: control reaches end of non-void function make: *** [moc_item.o] Ошибка 1 Название: Re: QListWidgetItem переменного размера. Отправлено: Drafter от Ноября 09, 2011, 18:41 Цитировать С делегатами я еще дело не имел. Я, конечно, могу ошибаться, но мне кажется, что получится слишком много кода для такой "простой" задачи. Зато получаете огромный простор для творчества :). Форомочку в прикреплённом файле делал именно через делегаты. Название: Re: QListWidgetItem переменного размера. Отправлено: ecspertiza от Ноября 09, 2011, 18:48 ksk-, сделай ребилд приложения, а еще лучше прибей moc файлы, сделай clear ,а потом билд.
Название: Re: QListWidgetItem переменного размера. Отправлено: ksk- от Ноября 14, 2011, 00:44 К сожалению ребилд не помог. Похоже, придется с делегатами разбираться.
Название: Re: QListWidgetItem переменного размера. Отправлено: andrew.k от Ноября 14, 2011, 03:21 попробуй объявить класс так: Код
Так делал, выдает следующее: moc_item.cpp:41:8: error: ‘staticMetaObject’ is not a member of ‘QListWidgetItem’ moc_item.cpp: In member function ‘virtual void* Item::qt_metacast(const char*)’: moc_item.cpp:61:12: error: ‘qt_metacast’ is not a member of ‘QListWidgetItem’ moc_item.cpp: In member function ‘virtual int Item::qt_metacall(QMetaObject::Call, int, void**)’: moc_item.cpp:66:11: error: ‘qt_metacall’ is not a member of ‘QListWidgetItem’ moc_item.cpp: In member function ‘virtual void* Item::qt_metacast(const char*)’: moc_item.cpp:62:1: warning: control reaches end of non-void function make: *** [moc_item.o] Ошибка 1 Название: Re: QListWidgetItem переменного размера. Отправлено: ksk- от Ноября 14, 2011, 23:54 попробуй объявить класс так: Код
Так делал, выдает следующее: moc_item.cpp:41:8: error: ‘staticMetaObject’ is not a member of ‘QListWidgetItem’ moc_item.cpp: In member function ‘virtual void* Item::qt_metacast(const char*)’: moc_item.cpp:61:12: error: ‘qt_metacast’ is not a member of ‘QListWidgetItem’ moc_item.cpp: In member function ‘virtual int Item::qt_metacall(QMetaObject::Call, int, void**)’: moc_item.cpp:66:11: error: ‘qt_metacall’ is not a member of ‘QListWidgetItem’ moc_item.cpp: In member function ‘virtual void* Item::qt_metacast(const char*)’: moc_item.cpp:62:1: warning: control reaches end of non-void function make: *** [moc_item.o] Ошибка 1 Спасибо большое, это помогло. Всего-то надо было QObject первым поставить. ))) |