Добрый день.
Есть дерево с двумя колонками. Вторая колонка вся напичкана 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'а.