2009-11-09 11 views
18

Czy istnieje odpowiednik powiązania danych .NET w Qt?Qt odpowiednik wiązania danych .NET?

Chcę wypełnić niektóre pola kombi i inne widżety za pomocą instrukcji QStrings, które odnoszą się do konkretnych elementów w mojej bazie danych. Byłoby jednak czystsze, gdybym mógł powiązać dane z tymi ciągami, zamiast ponownie wysyłać zapytania do bazy danych w oparciu o nowy wybór typu combobox lub inny schemat oparty na tworzeniu własnego indeksu jednostek, które byłyby przeszukiwane za pomocą QStrings.

Najlepsze, co wymyśliłem, to wyprowadzenie tych elementów z QString i wrzucenie ich do widżetów w ten sposób, ale jeszcze nie spróbowałem. Nie jestem pewien, czy to zadziała tak, jak chcę, i wygląda na paskudnego hacka.

Jeśli nie ma powiązania danych, co sugerujesz?

Dziękuję.

+8

+1 Z jakiegoś powodu, idea, że ​​powinny być proste wiązanie elementów interfejsu użytkownika z bazą danych lub modelem w pamięci nigdy nie było daleko poza światem systemu Windows. O ile jest to możliwe z sygnałami Qt, to wciąż jest dużo kodu tablicy kotłowej i bardzo żmudny :( –

+0

Jest to bardzo stary pomysł, który poprzedza .Net. Używałem go w frameworkach OOFILE Form w 1997 roku i widziałem kod wygenerowany przez AppMaker z jeszcze wcześniejszego rocznika, który generuje wiązania nawet w celu kierowania czystym kodem C. –

Odpowiedz

3

Cóż, w przypadku combobox można ustawić model. Ogólnie dla QObjects można użyć sygnału powiadomienia dla właściwości do połączenia lub innych sygnałów niezwiązanych z właściwościami. Myślę, że jest inny sposób, ale nie mogę sobie przypomnieć.

+0

Wydaje się, że to jest droga, dzięki. Mam nowe do Qt, a twoja sugestia dotycząca modeli wydaje się najłatwiejszym sposobem na zrobienie tego. Wydaje mi się, że jest to dość brzydkie podejście do wiązania danych, ale wydaje się, że przynosi ono pożądaną funkcjonalność. Jeszcze raz dziękuję –

+3

Sugeruję, aby spojrzeć na QDataWidgetMapper, która działa dla widżetów spoza frameworka MVC. – cheez

5

Jednym ze sposobów jest użycie Qt Model/View Classes (z bazą w QAbstractItemModel), ale potrzebują one, aby widget dziedziczył QAbstractItemView (są to widżety takie jak QTableView itp.).
Jeśli chcesz, aby model Qt mapy do zestawu widżetów, które nie mają nic wspólnego z QAbstractItemView, możesz użyć QDataWidgetMapper, który mapuje oddzielny widżet na Qt Model/View indexes. Ale w każdym razie, jak powiedział Aaron Digulla, musisz napisać kod płyty kotła ...

6

Jako nonszalancki użytkownik wspomniany w komentarzu możesz użyć klasy QDataWidgetMapper. Jest to dość łatwy sposób wiązania dowolnych widżetów z danymi przechowywanymi w pliku QAbstractItemModel.

Przykładem na powiązanej stronie pokazuje w kilku linii kodu, w jaki sposób można połączyć model danych do wspólnych używanych widgetów wejściowe:

QDataWidgetMapper *mapper = new QDataWidgetMapper; 
mapper->setModel(model); 
mapper->addMapping(mySpinBox, 0); 
mapper->addMapping(myLineEdit, 1); 
mapper->addMapping(myCountryChooser, 2); 
mapper->toFirst(); 
Powiązane problemy