Qt ライブラリ (バージョン 4.8) を使用するアプリケーションに取り組んでいます。
QStandardItemModel を持つ QTreeView があります。私のウィジェットは次のようになります。
アイテム1
サブアイテム11
サブアイテム12
アイテム2
サブアイテム21
サブアイテム22
アイテム3
サブアイテム31
サブアイテム32
QTreeView に項目を追加する方法は次のとおりです。
model->setItem(0, 0, item1);
item1->setChild(0, 0, subitem12);
ユーザーがアイテムをダブルクリックしたときにのみアクションを実行したい (サブアイテムをクリックしても何もしない)。そこで、 doubleClicked(const QModelIndex & index)シグナルを使用します。
ユーザーがダブルクリックしたアイテム/サブアイテムに関する情報を処理したい。だから私は私のアイテム/サブアイテムの行を取得します:
index.row();
しかし、アイテム/サブアイテムを参照してその名前を表示したり、子があるかどうかを確認しようとするたびに、アイテムにしかアクセスできません:
index.model()->item(row)->text();
私の質問は、スロット内のサブアイテム (アイテムとサブアイテムの間のアイテム) にアクセスするにはどうすればよいですか? または、どうすればそれらが信号を発するのを防ぐことができますか? それらを無効にすることはできません。ユーザーにとって混乱を招く可能性があります。
編集:問題は、アイテムまたはサブアイテムをクリックして実行するたびに:
index.model()->item(row)->hasChildren();
また:
index.model()->item(row)->parent() == 0;
私は結果として真実になります。そのため、アイテムのみを参照できます。
私の質問は:サブアイテムを参照する正しい方法は何ですか?