Model/View Programming - Delegaci, ustawienie specjalnego edytora

Odpowiedz Nowy wątek
2011-09-16 15:00
0

Witam.

Mam klasę DictionaryModel wywiedzioną z klasy QAbstractListModel. Model składa się z trzech kolumn. W pierszej wyświetla się informacja czy słowo jest aktywne (co jest związane z opcją losowania słów - losowane są tylko aktywne), druga kolumna to słowo w języku źródłowym, a trzecia to tłumaczenia. Mój problem polega na tym, że chciałbym aby w pierwszej kolumnie, zamiast tekstu (true/false) wyświetlany był check box z odpowiednio ustawionym stanem.

Udało mi się osiągnąć taki efekt, jednak nie jest to do końca to czego oczekiwałem. Otóż, utworzyłem klasę DictionaryDelegate korzystając z klasy QStyledItemDelegate i nadpisałem jej funkcję paint() i pozostałe potrzebne do stworzenia edytora w postaci check box'a. Za pomocą funkcji QStyle::drawControl rysuję mój check box z funkcji DictionaryDelegate::paint(). Po kliknięciu dwa razy na odpowiednie pole w tabeli włącza mi się edytor i wtedy mogę sobie kliknąć w edytorze i zmienić stan... W sumie trzeba aż trzech kliknięć, a ja chciałbym aby wystarczyło jedno kliknięcie aby zmienić stan odpowiedniego check box'a.

Co robić? Z góry dziękuję za pomoc :)

Pozostało 580 znaków

2011-09-16 15:17
0

Do ograniczenia do 2 klików starczy zmienić editTriggers...ale skoro chcesz aby działo się to po 1 klinięciu,to chyba będziesz musiał z palca wywoływać QAbstractItemView::edit() w przeimplementowanym mousePressEvent


"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]

Pozostało 580 znaków

2011-09-16 15:24
0

Ostanio męczę się ze swoją zakręconą klasą modelu i nie miałem okazji wejść w delegaty ale zajrzałem w klasę bazową widoków i wyszukałem QAbstractItemView::EditTrigger co mnie skierowało do dokumentacji on-line:
http://doc.qt.nokia.com/lates[...]temview.html#EditTrigger-enum

Nie wiem czy to pomoże, ale brzmi obiecująco to co napisali. Daj znać czy pomogło - może się i mi to przyda na przyszłość.


Jeśli uważasz mój post za wartościowy - daj punkt.
Mój post pomógł Ci rozwiązać problem - zaznacz go.

Pozdrawiam

Pozostało 580 znaków

2011-09-16 15:24
0

Ok. Dziękuję za szybką odpowiedź. Postaram się jeszcze dziś wieczorem nad tym popracować i dać znać czy się udało. ;)

Pozostało 580 znaków

2011-09-17 07:59
0

No i działa :D Napisałem nową klasę widoku i nadpisałem w niej funkcje mousePress/Release/MoveEvent i zmieniłem zachowanie dla tej pierwszej kolumny. Konkretnie, to robię coś tylko w chwili zwolnienia lewego przycisku myszy - tzn. zmieniam stan check box'a na przeciwny i wywołuję funkcję QAbstractItemView::update() aby zmiany były widoczne. Ze zmianą EditTriggers nic mi nie wyszło - to chyba tylko determinuje kiedy wejść w tryb edycji. Jeszcze raz dzięki za pomoc ;)

to daj zielonego ptaszka przy pomocnym poście - MasterBLB 2011-09-17 10:20

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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