2011-08-30 12 views
5

Oto co próbuję dostać (to QTableView widget + MVC podstawie QAbstractTableModel z pomnożyć delegatów):Jak utworzyć model/widok QTableView z niestandardowymi (nieedytowalnymi) uczestnikami?

enter image description here

Uwagi:

  • Deleguje nie pracującego jako redaktorzy, to TYLKO widzowie! Nie mam do edycji modelu z tym widokiem tabeli.

  • Delegaci muszą być wykonalni. Oznacza to, że całkowita wysokość NIEBIESKIEGO rzędu może wynosić 25 pikseli lub 250 pikseli.

  • MV jest proste dane:

    1-RZĘDOWY: CompanyName1 Nazwa1, NAME2, NAME3 INNE DANE

    2-RZĘDOWY: CompanyName2 SingleName1 INNE DANE

    3ROW: CompanyName3 Nazwa1, name2 innych danych i tak dalej. ..

Pytanie:

  • Czy można na przykład utworzyć niestandardowego uczestnika (QItemDelegate lub QStyleItemDelegate) do drugiej kolumny, jak na powyższym obrazku? A jeśli to możliwe, może możesz podać mi przykłady lub linki do zasobów, gdzie mogę na nie spojrzeć.

PS. Tak, obejrzałem wszystkie przykłady z delegatami, ale po prostu nie rozumiem, jak zrobić to, co chcę.

PSS. QTableView ->setIndexWidget() Myślę, że to nie jest dobry pomysł. Ale metody QTableView ->setItemDelegateForColumn(myCustomDelegate) są lepsze!

P3S. Nie szukam rozwiązania dla klasy QTableWidget ...

Dziękuję za odpowiedzi! :-)


Aktualizacja # 1:

  • myślę, że:

    • Delegaci są wykorzystywane wyłącznie do edycji (na przykład, gdy pracujemy z modelem/view object) i zarządzaj podobnymi przedmiotami (all/just column/just row).

    • Niestandardowe widżety są lepsze, ale nie spotkałem ich w darmowych projektach Qt. I nie jest łatwo uzyskać ładny i poprawny kod tego rodzaju widżetów ...


Dodatek:

  • Oto link podobieństwa pytanie.
+0

Czy możesz opisać sposób pobierania danych z modelu? Czy używasz niestandardowych ról? Na przykład, w jaki sposób mogę uzyskać "CompanyName2" dla określonego wiersza? – Casey

+0

Na razie nie mam takiego rozwiązania. Tylko 'QTreeWidget' + moje niestandardowe widżety. W moim pytaniu szukam odpowiedzi, która będzie zawierała informacje o łączeniu rzeczy, takie jak: widok tabeli, modele i delegaci razem ... – mosg

+0

@mosg byłoby dużo łatwiej odpowiedzieć, jeśli zawarłeś pełny minimalny przykład pracy w którym chcesz zrobić X. Szczerze mówiąc, znalazłem przykład delegata spinboksa bardzo pomocny i prosty. http://qt-project.org/doc/qt-4.8/itemviews-spinboxdelegate.html. Pracuję w Pythonie, więc nie mogę pomóc zbyt wiele ze szczegółami, poza odpowiedzią poniżej: jest to całkiem proste - wystarczy ponownie zaimplementować farbę dla modelu tylko do odczytu. Reszta prac sięga do klasy podstawowej delegatów. – neuronet

Odpowiedz

0

Delegaci są przydatni nie tylko do tworzenia widżetów używanych podczas edycji. Są również używane do tworzenia ogólnego wyglądu i stylu każdego widocznego indeksu (w tym przypadku komórki tabeli).

Możesz spersonalizować wygląd i sposób działania, ponownie wdrażając metodę delegata w postaci paint().

Powiązane problemy