2016-08-19 8 views
0

私はすでに、独自のモデルとこのQTreeViewの1つの列にQComboBoxを表示できる代理人を持つQTreeViewを持っています。いくつかの特定のセルでのみQComboBoxを(代議員経由で)表示しますか?

ツリーに表示されているデータによっては、完全な列ではなく一部のセルでのみQComboBoxを有効にして有効にする必要があります。私はすでに、デリゲートの関数createEditor()がNULLを返すときに、QComboBoxが表示されずに処理されないことを発見しました。しかし、createEditor()にはモデルへの参照がありません。したがって、QComboboxを表示する必要がある場合は、指定されたインデックスを求めることができません。一方、関連する情報をデリゲートに格納することはできません(一般的なものであり、そのようなソリューションはビューとデータIMHOの分離に違反します)。

それでは、createEditor()からモデルにアクセスするにはどうしたらいいですか、QTreeViewのいくつかのセルに対して代理QComboBoxを動的に非表示にする必要がありますか?

ありがとうございます!

答えて

3

あなたはあなたがインデックスとモデルの両方を持っている、と私はコンボボックスを作成するかどうかを決定するのに十分だと思いますQModelIndex

QWidget * createEditor(QWidget * parent, const QStyleOptionViewItem & option, const QModelIndex & index) const 
{ 
    const QAbstractItemModel * model = index.model(); 
    //..... 
} 

からモデルを得ることができます。

他のウィジェットで他のセルを編集可能にする必要があるかどうかは疑問から分かりません。そうでない場合は、編集可能でないセルをモデル内の正しいフラグに戻すだけです(編集可能なセルの場合のみQt::ItemIsEditableを含む)。QAbstractItemModel::flags

を参照してください。
関連する問題