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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: connect QTreeWidgetItem и QSpinBox  (Прочитано 3016 раз)
Rosster
Гость
« : Июнь 27, 2012, 14:17 »

Добрый день.
Есть дерево с двумя колонками. Вторая колонка вся напичкана QSpinBox.
Для этого я делал:
Код
C++ (Qt)
QSpinBox *edit = new QSpinBox(ui->tree);
edit->setMaximum(999999999);
ui->tree->setItemWidget(new QTreeWidgetItem(ui->tree), 1, edit);
 
Также сделал коннект на изменение данных для каждого QSpinBox.
connect(edit, SIGNAL(valueChanged(int )), this, SLOT(slItemChanged()));
Но теперь встала обратная проблема: получить QTreeWidgetItem в котором находится редактируемый QSpinBox.
Мне просто надо прописать у родителя этого QTreeWidgetItem сумму всех детей, т.к. изменился QSpinBox.
Каким образом это можно реализовать?
Записан
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #1 : Июнь 27, 2012, 14:37 »

Добрый день.
Есть дерево с двумя колонками. Вторая колонка вся напичкана QSpinBox.
Для этого я делал:
Код
C++ (Qt)
QSpinBox *edit = new QSpinBox(ui->tree);
edit->setMaximum(999999999);
ui->tree->setItemWidget(new QTreeWidgetItem(ui->tree), 1, edit);
 
Также сделал коннект на изменение данных для каждого QSpinBox.
connect(edit, SIGNAL(valueChanged(int )), this, SLOT(slItemChanged()));
Но теперь встала обратная проблема: получить QTreeWidgetItem в котором находится редактируемый QSpinBox.
Мне просто надо прописать у родителя этого QTreeWidgetItem сумму всех детей, т.к. изменился QSpinBox.
Каким образом это можно реализовать?
самый простой способ - хранить QTreeWidgetItem в spinBox'e.
Код
C++ (Qt)
   QSpinBox *edit = new QSpinBox(ui->tree);
   edit->setMaximum(999999999);
   QTreeWidgetItem *item = new QTreeWidgetItem(ui->tree);
   ui->tree->setItemWidget(item, 1, edit);
   edit->setProperty("treeItem", qVariantFromValue((void*)item));
 

в обработчике slItemChanged():
Код
C++ (Qt)
QSpinBox *_edit = qobject_cast<QSpinBox*>(sender());
   if (!_edit)
       return;
   QTreeWidgetItem *_item = (QTreeWidgetItem*)_edit->property("treeItem").value<void*>();
   if (!_item)
       return;
   ///
или пробегаться по всем виджетам дерева в поисках измененного spinBox'а.
Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
Rosster
Гость
« Ответ #2 : Июнь 27, 2012, 15:26 »

То что нужно, спасибо большое! Тема закрыта.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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