Az előző két postban arra mutattam példákat, hogy miként lehet a TreeWidget (TW) valamelyik eleméhez widget-et rendelni setItemWidget utasítással. Itt is igaz, hogy ha egy pointer egyszer már bármilyen formában kapcsolatba került TW-vel, azt mégegyszer nem tudjuk felhasználni. Pl. ha egy Qt Designer-ben létrehozott lineEdit-et rendelünk a TW egy eleméhez, azt nem tudjuk újra ugyanerre a célra használni, mert a TW lesz a widget tulajdonosa. A program segmentation fault üzenettel elszáll a setItemWidget második hívásakor. A probléma megkerülésére találtam a következő módszert:
void RequestsForm::automata_kivalasztasa_slot(QString automata_neve) {
kod_be_lineEdit = NULL;
delete (kod_be_lineEdit);
kod_be_lineEdit = new QLineEdit("?");
connect(kod_be_lineEdit, SIGNAL(returnPressed()), this, SLOT(kod_be_returnPressed_slot()));
widget.treeWidget->setItemWidget(kivalasztott_automata, 2, kod_be_lineEdit);
kod_be_lineEdit->setFocus();
}
Mint látható, nem ugyanazt a beillesztendő pointert használom újra meg újra, hanem dinamikusan létrehozom őket minden setItemWidget hívás előtt. Ez lesz a setWidgetItem 3. paramétere. Miután kiolvastam az adatokat a pointer által hivatkozott widget-ből, letörölhetem a pointert.