QListView, różne odstępy pomiędzy elementami w liście

0
zkubinski napisał(a):

no to jeszcze jakaś garść czegoś co potencjalnie może się nadawać

QSize MyDelegate::sizeHint( const QStyleOptionViewItem &option, const QModelIndex &index ) const
{
   return(QSize(100, 50));
}

Nie widziałeś jak napisałem to?

Riddle napisał(a):
_13th_Dragon napisał(a):

Daj w sizeHint() razem z wyliczonym odstępem przed (lub po) jedynie narysuj tą część która przed (lub po) kolorem tła listy.

Wtedy odstęp się podświetla i zaznacza. Sprawia to wrażenie po prostu bardzo długiego eventa, a ja potrzebuję odstępu między nimi.

1
Riddle napisał(a):
_13th_Dragon napisał(a):

W takim razie zrób przerwy osobnymi item'ami zaś ustaw ich jako disabled.

Jak ustawić item jako disabled, jeśli używam QStyledItemDelegate?

Ale wtedy musiałbym dodawać wartości do modelu, po to żeby nimi "symulować" odstęp. Dziwne.

Niekoniecznie.
Możesz zrobić "zwykły" model z surowymi danymi oraz napisać jakiś proxy model, który podepniesz pod widok.
Takie proxy po prostu w zależności od tego czy index.row() jest parzyste czy nie zwracałoby albo dane z 'prawdziwego' modelu(czyli te wydarzenia) albo je imitowało(czyli obliczałoby rozmiar pustaka + czyściłoby flagę Qt::ItemIsEnabled).

0
tajny_agent napisał(a):
Riddle napisał(a):
_13th_Dragon napisał(a):

W takim razie zrób przerwy osobnymi item'ami zaś ustaw ich jako disabled.

Jak ustawić item jako disabled, jeśli używam QStyledItemDelegate?

Ale wtedy musiałbym dodawać wartości do modelu, po to żeby nimi "symulować" odstęp. Dziwne.

Niekoniecznie.
Możesz zrobić "zwykły" model z surowymi danymi oraz napisać jakiś proxy model, który podepniesz pod widok.
Takie proxy po prostu w zależności od tego czy index.row() jest parzyste czy nie zwracałoby albo dane z 'prawdziwego' modelu(czyli te wydarzenia) albo je imitowało(czyli obliczałoby rozmiar pustaka + czyściłoby flagę Qt::ItemIsEnabled).

A jak bym wtedy zrobił dodawanie, usuwanie i zmianę wartości?

1

Nie wiem, pytałeś o wyświetlanie :P

Ale wydaje mi się, że QAbstractProxyModel to dobry kierunek.

0
tajny_agent napisał(a):

Nie wiem, pytałeś o wyświetlanie :P

Ale wydaje mi się, że QAbstractProxyModel to dobry kierunek.

Po co byłby mi model, gdybym chciał tylko wyświetlać ;D

Nie, potrzebuje normalnie robić inserty, remove'y, etc. Możę filtrowanie. Nie potrzebuje tylko sortowania.

0
Riddle napisał(a):
tajny_agent napisał(a):

Nie wiem, pytałeś o wyświetlanie :P

Ale wydaje mi się, że QAbstractProxyModel to dobry kierunek.

Po co byłby mi model, gdybym chciał tylko wyświetlać ;D

Nie, potrzebuje normalnie robić inserty, remove'y, etc. Możę filtrowanie. Nie potrzebuje tylko sortowania.

Jestem nowy w QT, piszę od kilku dni. pokazałbyś jakiś przykład?

Może tak w ogóle być, że proxy może sobie "wytworzyć" nowy element?

0

Chyba podpiąłem implementację, najpierw pod QIdentityProxyModel, ale teraz żaden element się nie pokazuje :/

0
_13th_Dragon napisał(a):

Szklana kula wskazuje ...

No jak przekazuję mój model do QListView to wszystko śmia, ale jak tylko opakuję go w QIdentityProxyModel, to nie widzę zadnych elementów w list-view.

1

Bracie @Riddle takie akrobacje będą zapewne wymagały zaimplementowania własnego QAbstractItemView, może przy odrobinie szczęścia da się oprzeć na QListView aby napisać własną metodę paintEvent()z własnymi, zmiennymi odstępami. Poszukaj w dokumentacji QStyleOptionod QListView/QAbstractItemView, któryś z nich zawiera definicję odstępu pomiędzy elementami - tylko w takim wypadku nie będzie on zmienny.

0

Właśnie miałem pisać, że tak po przemyśleniu na świeżo to QAbstractItemView byłby chyba najodpowiedniejszy.

Sprawdziłem poprzedni pomysł z modelem proxy no i niby działa, ale mimo wyzerowania wszystkich flag dla 'odstępów' one i tak reagują na hover.

Model bazowy: QStringListModel
po lewej QListView + QStringListModel, po prawej QListView + Proxy
listview.png

1 użytkowników online, w tym zalogowanych: 0, gości: 1