我不知道我是否在我的 qt 代码中做错了什么。我只需要itemChanged
每次在项目数据更改时发出该信号。我使用以下代码制作模型:
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 项不能在非 gui 线程中创建,qtreewidget 不能使用自创建模型。这就是为什么我必须将 QTreeView 与 QStandardItem 一起使用的原因。