Model/View Programming - Delegaci, ustawienie specjalnego edytora

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 :)

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

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/latest/qabstractitemview.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ść.

0

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

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 ;)

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