アイテムが折りたたまれたときに別の方法でペイントしたいシナリオがありますがQTreeView
、モデルもデリゲートもビュー内のアイテムの折りたたまれた/展開された状態を認識していないため、そうする方法がわかりません.
これは、異なるスタイルにしたいだけの場合ではないことに注意してください。何をペイントするかを知るためにインデックスごとにモデルからデータを取得する必要があるため、スタイルシートはそれをカットしません。
アイテムが折りたたまれたときに別の方法でペイントしたいシナリオがありますがQTreeView
、モデルもデリゲートもビュー内のアイテムの折りたたまれた/展開された状態を認識していないため、そうする方法がわかりません.
これは、異なるスタイルにしたいだけの場合ではないことに注意してください。何をペイントするかを知るためにインデックスごとにモデルからデータを取得する必要があるため、スタイルシートはそれをカットしません。
これは簡単ではありませんが、私がお手伝いできると思います。モデルの参照も持つデリゲートを作成する必要があります (存在する場合はプロキシも)。
これが私の音楽プレーヤー用に作ったものです。QAbstractItemDelegate ではなく QStyledItemDelegate を使用したことに注意してください。
void YourItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
QStandardItem *item = _model->itemFromIndex(_proxy->mapToSource(index));
switch (item->type()) {
case Miam::IT_Album:
this->paintRect(painter, o);
this->drawAlbum(painter, o, static_cast<AlbumItem*>(item));
break;
case Miam::IT_Artist:
this->paintRect(painter, o);
this->drawArtist(painter, o, static_cast<ArtistItem*>(item));
break;
case Miam::IT_Disc:
this->paintRect(painter, o);
this->drawDisc(painter, o, static_cast<DiscItem*>(item));
break;
case Miam::IT_Separator:
this->drawLetter(painter, o, static_cast<SeparatorItem*>(item));
break;
case Miam::IT_Track: {
/// etc
break;
}
default:
QStyledItemDelegate::paint(painter, o, index);
break;
}
}
次に、QTreeView クラスに次のものがあります。
bool QTreeView::isExpanded(const QModelIndex & index) const
アイテムが展開されているかどうかを確認して、特別な塗装操作を行うことができます。