私はQt 5.6を使用しています。私の目標は、ロードされた設定に応じてコンボボックス、エディットボックス、チェックボックス、ボタンなどの項目を設定する必要があるQTreeViewを使用してダイナミックツリーを開発することです。新しいデータがロードされると、ツリーデータが変更される可能性があります。親ノードと子ノードを持つツリーには多くのノードが配置されます。カスタムデリゲートを使用した動的qtreeview
QTreeViewを作成し、QITemDelegateまたはQStyledItemDelegateを継承したり、Qt QuickのQMLツリービューを使用して独自のデリゲートを実装するなど、このタイプのツリービューを実装するためのさまざまなオプションについて説明しました。
私の目的では、ツリーを動的に設定してパラメータを変更する最初のオプションを選択しましたが、ツリー内にデリゲートを設定する唯一のオプションとして、選択したセルに必要なデリゲートを設定することができませんsetItemDelegateForRow、setItemDelegateForColumnまたはsetItemDelegateに設定します。ツリーは以下のようになります。子ノードのそれぞれに異なる代理人を設定するにはどうすればよいですか?
by (col, row)
Parent(cell 0,0)
->Child(cell 0,1) -combo box(1,1)
->Child(cell 0,2) -button(1,2)
->Child(cell 0,3) -check box(1,3)
...
...etc
Parent(cell 0,10)
->Child(cell 0,11) - edit box(1,11)
->Child(cell 0,12) - edit box(1,12)
->Child(cell 0,13) - check box(1,13)
...
...etc
編集
これは私がこれまでに設定私のツリービューを持っているかの簡易版です。子ノードの列1が表示されない理由は、モデルの列数を設定しなかったためです。私は以下のコードを更新して、今動作します。
enum EditType
{
TYPE_Text,
TYPE_CheckBox,
TYPE_ComboBox,
TYPE_Button
};
QTreeView* tree = new QTreeView(this);
QStandardItemModel* model = new QStandardItemModel;
model->setColumnCount(2);
tree->setModel(model);
//set custom delegate for column 1 of the tree
CustomDelegate *customDelegate = new CustomDelegate(this);
tree->setItemDelegateForColumn(1, customDelegate);
// Add parent nodes
QStandardItem* parent1 = new QStandardItem(tr("parent1"));
QStandardItem* parent2 = new QStandardItem(tr("parent2"));
model->appendRow(parent1);
model->appendRow(parent2);
// add a child
QList<QStandardItem*> childrow;
QStandardItem* child = new QStandardItem(tr("child1"));
childrow.append(child);
QStandardItem* child_value = new QStandardItem();
child_value->setData(TYPE_ComboBox, Qt::UserRole);
childrow.append(child_value);
parent1->appendRow(it_child);
これらの点を確認してください。https://github.com/commontk/QtPropertyBrowser、https://github.com/intbots/QtPropertyBrowser、https://doc.qt.io/アーカイブ/ qq/qq18-propertybrowser.html – mvidelgauz