Wpis z mikrobloga

Cześć Mirki z #qt i #programowanie

Robię desktopową plikację w QML. Potrzebuję zrobić listę/tabelę o 15 wierszach. Każdy wiersz składa się z opisu, pola tekstowego i buttona, który ma aktualizować dane pole w strukturze w backendzie. Każdy wiersz to inne pole w strukturze. Jak Wy byście się za to zabrali?

Osobiście widzę kilka dróg i nie wiem co jest lepsze/czystsze.
1) Mogę to potraktować jako ListModel w QML, potem wyświetlić jako ListView i przy każdym buttonie pobierać index z modelu i wartość z pola tekstowego. W c++ na podstawie indeksu aktualizowałbym konkretne pole w strukturze. Tutaj nie podoba mi się dekodowanie indeksu na pole w strukturze.
2) Mogę napisać taki model w C++ przez dziedziczenie QAbstractItemModel (albo QAbstractListModel), podpiąć do tego moją strukturę i wyeksportować to do qml. Taki model miałby tylko jedno pole z wieloma "role". Zdecydowanie więcej tu pracy i też nie wydaje mi się, żeby to było narzędzie do tego celu. Ale może się mylę?

Co Wy byście zrobili?
  • 7
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@pracoholik69: Strukturę masz w C++ czy w JSONie? Pierwszy jest lepszy do struktur dynamicznych, inaczej lepiej zoptymalizować to w C++.

miałby tylko jedno pole

No chyba na każde pole ze struktury potrzebujesz rekord je opisujący. Ale tak nie robi się tabelki tylko QAbstractListModel i wiele user ról z tekstowymi nazwami.
  • Odpowiedz
@lionbest: Struktura jest w C++.

No chyba na każde pole ze struktury potrzebujesz rekord je opisujący.

Wyobrażam to sobie inaczej - jeden rekord QAbstractListModel zawiera jedną strukturę. rowCount da 1 w takim przypadku.

Szukam najlepszego sposobu na możliwość zmiany struktury zawartej w c++ przez qml ;)
  • Odpowiedz
@lionbest:

to dlaczego chcesz mieć row count na 1?

Istnieje wyłącznie jedna struktura, a do jej pól odnosiłbym się przez role.

Nie wiem czy do końca łapię jak to wszystko Qt realizuje (w zasadzie, to mój drugi tydzień poważniejszej pracy z tym narzędziem). W momencie, w którym definiuję model, mogę określić też role. Role spełniają funkcję zmiennych dla jednego wiersza, więc jeśli stworzę listę o czterech elementach i trzech rolach, to w efekcie dostanę coś na styl tablicy struktur. Do konkretnej struktury odnoszę się przez index, a do pola w tej strukturze
  • Odpowiedz
Ale skoro chcesz mieć kilka takich samych wierszy z inputem i buttonem to chyba prościej jest użyć Repeatera albo ListView z delegatką która powiedzmy bedzie wyświetlać nazwę zapisaną w role name oraz ustawiać role o nazwia value.

Da się prosto przekształcić pola w strukturze w listę z pól?


Jak masz wystawione poprzez Q_PROPERTY to wszystko da sie dynamicznie zrobić.
A jeżeli masz korzystasz z jakiejś innej serializacji to może ona mieć dynamiczne
  • Odpowiedz