Russian Qt Forum
Май 17, 2024, 02:47 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QListWidgetItem переменного размера.  (Прочитано 7161 раз)
ksk-
Самовар
**
Offline Offline

Сообщений: 178



Просмотр профиля
« : Ноябрь 07, 2011, 04:40 »

Всем привет. Уже несколько дней не могу решить одну проблему. Есть объект QListWidget, каждый item которого есть виджет, на виджете есть кнопка, при нажатии на которую виджет увеличивается в размере. Я хочу, чтобы соответствующий item так же увеличивался и все нормально отображалось. Прошу подсказать мне хоть что-нибудь. Заранее благодарен.
Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #1 : Ноябрь 07, 2011, 11:49 »

Пока не совсем понятно в чем проблема то Улыбающийся Можно задать MinimumSize для виджета на котором кликаешь кнопку, можно лайоутами рулить, в чем загвоздка то ?
Записан
Drafter
Гость
« Ответ #2 : Ноябрь 07, 2011, 21:22 »

Нужно делать своего делегата (унаследовамшись от QItemDelegate) и перегружать в нём виртуальный метод sizeHint(...).
Записан
ksk-
Самовар
**
Offline Offline

Сообщений: 178



Просмотр профиля
« Ответ #3 : Ноябрь 08, 2011, 20:24 »

Пока не совсем понятно в чем проблема то Улыбающийся Можно задать MinimumSize для виджета на котором кликаешь кнопку, можно лайоутами рулить, в чем загвоздка то ?

Я так пробовал, но размеры айтема не менялись. В PyQt проблема решалась созданием нового класса, наследуюещегося от QListWidgetItem. Но когда я пытался проделать подобное на С++, то компилятор ругается на макрос "Q_OBJECT". Но ведь без него не будет работать механизм слотов и сигналов.
Записан
ksk-
Самовар
**
Offline Offline

Сообщений: 178



Просмотр профиля
« Ответ #4 : Ноябрь 08, 2011, 20:28 »

Нужно делать своего делегата (унаследовамшись от QItemDelegate) и перегружать в нём виртуальный метод sizeHint(...).

С делегатами я еще дело не имел. Я, конечно, могу ошибаться, но мне кажется, что получится слишком много кода для такой "простой" задачи.
Записан
ksk-
Самовар
**
Offline Offline

Сообщений: 178



Просмотр профиля
« Ответ #5 : Ноябрь 08, 2011, 20:35 »

Вот пример кода на Python'е:

Код
Python
class Item(QtGui.QListWidgetItem):
   def __init__(self, widget, parent=None):
       QtGui.QListWidgetItem.__init__(self, parent)
       self.widget = widget
       self.setSizeHint(QtCore.QSize(0, 17))
 
       self.widget.ui.pushButton.clicked.connect(self.resized)
 
   def resized(self):
       self.setSizeHint(self.widget.sizeHint())

Как бы подобное на C++ сделать?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4729



Просмотр профиля WWW
« Ответ #6 : Ноябрь 08, 2011, 22:16 »

попробуй объявить класс так:
Код
C++ (Qt)
class Item : public QListWidgetItem, public QObject
{
   Q_OBJECT
...
};
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
ksk-
Самовар
**
Offline Offline

Сообщений: 178



Просмотр профиля
« Ответ #7 : Ноябрь 09, 2011, 15:31 »

попробуй объявить класс так:
Код
C++ (Qt)
class Item : public QListWidgetItem, public QObject
{
   Q_OBJECT
...
};

Так делал, выдает следующее:

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
Записан
Drafter
Гость
« Ответ #8 : Ноябрь 09, 2011, 18:41 »

Цитировать
С делегатами я еще дело не имел. Я, конечно, могу ошибаться, но мне кажется, что получится слишком много кода для такой "простой" задачи.

Зато получаете огромный простор для творчества Улыбающийся. Форомочку в прикреплённом файле делал именно через делегаты.
Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #9 : Ноябрь 09, 2011, 18:48 »

ksk-, сделай ребилд приложения, а еще лучше прибей moc файлы, сделай clear ,а потом билд.
Записан
ksk-
Самовар
**
Offline Offline

Сообщений: 178



Просмотр профиля
« Ответ #10 : Ноябрь 14, 2011, 00:44 »

К сожалению ребилд не помог. Похоже, придется с делегатами разбираться.
Записан
andrew.k
Гость
« Ответ #11 : Ноябрь 14, 2011, 03:21 »

попробуй объявить класс так:
Код
C++ (Qt)
class Item : public QListWidgetItem, public QObject
{
   Q_OBJECT
...
};

Так делал, выдает следующее:

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 должен быть первым в списке наследования.
Записан
ksk-
Самовар
**
Offline Offline

Сообщений: 178



Просмотр профиля
« Ответ #12 : Ноябрь 14, 2011, 23:54 »

попробуй объявить класс так:
Код
C++ (Qt)
class Item : public QListWidgetItem, public QObject
{
   Q_OBJECT
...
};

Так делал, выдает следующее:

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 должен быть первым в списке наследования.

Спасибо большое, это помогло. Всего-то надо было QObject первым поставить. )))
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.167 секунд. Запросов: 19.