Ich weiß nicht, ob ich etwas falsch in meinem QT-Code. Ich brauche nur, dass das Signal itemChanged
jedes Mal ausgegeben wird, wenn sich die Daten geändert haben. ich folgenden Code verwenden, um das Modell zu machen:Qt itemChanged Signal mit QTreeView-Modell funktioniert nur auf der ersten Ebene Elemente
QStandardItemModel* model = new QStandardItemModel;
QStandardItem *parentItem = model->invisibleRootItem();
QList<QStandardItem*> itemList1;
QList<QStandardItem*> itemList2;
QList<QStandardItem*> itemList3;
QStandardItem* item1;
QStandardItem* item2;
QStandardItem* item3;
for (int i = 0; i < 3; ++i)
{
item1 = new QStandardItem;
item1->setText("item1-" + QString::number(i));
for (int i = 0; i < 3; ++i)
{
item2 = new QStandardItem;
item2->setText("item2-" + QString::number(i));
for (int i = 0; i < 3; ++i)
{
item3 = new QStandardItem;
item3->setText("item3-" + QString::number(i));
itemList3 << item3;
}
item2->appendRows(itemList3);
itemList3.clear();
itemList2 << item2;
}
item1->appendRows(itemList2);
itemList2.clear();
itemList1 << item1;
}
parentItem->appendRows(itemList1);
itemList1.clear();
ui.treeView->setModel(model);
QObject::connect(model, SIGNAL(itemChanged(QStandardItem*)), this, SLOT(onChanged(QStandardItem*)));
und ich möchte, dass onChanged
wird jedes Mal aufgerufen, wenn Element geändert - zum Beispiel Itemtext bearbeitet oder Checkbox angeklickt. Aber in jedem Fall habe ich itemChanged
Signal nur auf "item1 -..." Ebene Elemente (erste Ebene Elemente), nicht auf Element2/3 Ebene Elemente ausgelöst. Warum? Und wie kann ich es richtig machen?
PS: Derselbe Code mit QTreeWidget funktioniert perfekt, aber ich benutze Multithreading in meiner App und ich muss Modell und Ansicht teilen. QTreeWidget-Elemente können nicht in Nicht-GUI-Threads erstellt werden, und qtreewidget kann das selbst erstellte Modell nicht verwenden. Aus diesem Grund muss ich QTreeView mit QStandardItem verwenden.
Es funktioniert, thx) Ich schlug vor, dass Probleme in der Baum Bauweise war, aber du machst es klar und einfach) –