Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Rosster от Июнь 27, 2012, 14:17



Название: connect QTreeWidgetItem и QSpinBox
Отправлено: 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.
Каким образом это можно реализовать?


Название: Re: connect QTreeWidgetItem и QSpinBox
Отправлено: Kurles от Июнь 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'а.


Название: Re: connect QTreeWidgetItem и QSpinBox
Отправлено: Rosster от Июнь 27, 2012, 15:26
То что нужно, спасибо большое! Тема закрыта.