Mam kilka modeli, które używają reguł QAbstractItemModel
do pobierania i dostarczania danych dla tabeli.Używanie istniejącego (wiersz, kolumnę) modelu C++ z QtQuick (siatka, TableView)
Mój przykładowy model ma wiele kolumn i wierszy. Niestety widgety QtQuick mogą obsługiwać tylko jedną kolumnę. Inne "kolumny" są dodawane do widżetów QtQuick za pomocą ról. Tak wiele kolumn w widoku jest zgodnych z tą samą kolumną w modelu. Inne kolumny modelowe są ignorowane, jak wyjaśniono w this question and its answer
Myślałam, że nie powinno być zbyt trudne, aby zapewnić abstrakcji dla QML mają być wykorzystywane w C++ stronie (jako QAbstractProxyModel
), który pytany o rzędzie N, modulos przez liczbę kolumn modelu źródłowego i pobiera dane z wynikowej kolumny rzeczywistej. Wygląda na to, że działa on pod numerem Grid
, ale nie zadziała dla TableView
, ponieważ opiera się na TableViewColumn
i nazwach ról, zamiast używać tylko ciągłych indeksów wierszy. W tym celu model proxy musiałby rozróżniać rolę, z której kolumny modelu źródłowego można pobrać.
Fragment znajdujący się w odpowiedzi na http://qt-project.org/forums/viewthread/41793 robi to dla przyjęcia QSqlTableModel
, ale nadal brakuje tłumienia wielu sygnałów, aby były użyteczne. Tak jak wyobrażam sobie, że model źródłowy SQL emitowałby columnsInserted
, powinien przetłumaczyć na sygnał dataChanged
z nowymi rolami wybranymi dla tej kolumny i zmianą dostępnych nazw ról. Wydaje się, że QMLifyProxyModel jest lepszy, ale nie jest gotowy do produkcji i nie żyje od 4 lat.
Jak najlepiej to naprawić, aby dwa światy działały razem płynnie, zgodnie z oficjalną rekomendacją? Dlaczego w widokach QtQuick nie jest używana notacja (wiersz, kolumna), której używa już QAbstractItemModel
i QTableView
?