私のQtコードに何か問題があるかどうかわかりません。私は、項目データが変更されるたびにitemChanged
シグナルが放出されることを必要としています。例えば、項目のテキストを編集またはチェックボックスがクリックされた - onChanged
はアイテムが変更されるたびに呼び出されますことを、Qt item 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*)));
と私がしたい: 私はモデルを作るために、次のコードを使用します。 いずれの場合も、私はitemChanged
信号を "item1 -..."レベル項目(第1レベル項目)のみでトリガーし、item2/3レベル項目ではトリガーしませんでした。 なぜですか?そして、それをどうすれば正しいことができますか?
PS:QTreeWidgetと同じコードは完璧に動作しますが、私は自分のアプリでマルチスレッドを使用しており、モデルとビューを分割する必要があります。 qTreeWidget項目は非GUIスレッドでは作成できません。qtreewidgetは自己作成モデルを使用できません。それがQStandardItemでQTreeViewを使用する必要がある理由です。
それは動作しますが、THX)私はトラブルがツリー構築法であることを示唆したが、あなたはそれを明確かつ単純にする) –