Я не знаю, что-то не так в моем коде qt. Мне просто нужно, чтобы сигнал itemChanged
излучался каждый раз при изменении данных элемента. Я использую следующий код, чтобы сделать модель:Qt itemChanged сигнал с моделью QTreeView работает только на элементах первого уровня
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*)));
и я хочу, что onChanged
будет вызываться каждый раз, когда пункт изменен - например, текст элемента изменен или флажок щелкнул. Но в каждом случае я активировал сигнал itemChanged
только на элементах уровня «item1 -...» (элементы первого уровня), а не на элементах уровня item2/3. Почему? И как я могу сделать это правильно?
PS: тот же код с QTreeWidget работает отлично, но я использую многопоточность в своем приложении, и мне нужно разделить модель и просмотр. Элементы QTreeWidget не могут быть созданы в потоке non-gui, а qtreewidget не может использовать самосозданную модель. Вот почему я должен использовать QTreeView с QStandardItem.
Он работает, ТНХ) я предположил, что беда была в хлыстов здания, но вы делаете это ясно и просто) –