Forum QGIS
Custom gui - Wersja do druku

+- Forum QGIS (http://forum.quantum-gis.pl)
+-- Dział: Desktop GIS (http://forum.quantum-gis.pl/forum-4.html)
+--- Dział: QGIS (http://forum.quantum-gis.pl/forum-5.html)
+--- Wątek: Custom gui (/thread-396.html)



Custom gui - Rafa - 06-03-2011

Witam,

Chciałbym spróbować przerobić sobie interfejs użytkownika w ten sposób abym mógł pozmieniać lokalizacje niektórych pozycji w menu qgis a niektóre w ogóle wyrzucić. Gdzie w źródłach powinienem szukać właściwych fragmentów kodu i jak gui jest w QGIS organizowane?

Z góry dzięki za wszelkie wskazówki Smile
Pozdrawiam,
Rafał


RE: Custom gui - borys - 06-03-2011

W pliku src/app/qgisapp.cpp

QGisApp::CreateActions() i potem CreateMenus() oraz CreateToolbars()


RE: Custom gui - Rafa - 06-03-2011

Ok dzięki Smile
A gdzie szukać kodu jeśli chcę też pozbyć się/edytować funkcjonalności z menu kontekstowego ?


RE: Custom gui - borys - 06-03-2011

Zapewne w klasie, której to menu dotyczy, np. tu:
http://trac.osgeo.org/qgis/browser/trunk/qgis/src/app/legend/qgslegendlayer.cpp#L406

A klasę można znaleźć metodą eliminacji ;-)
http://doc.qgis.org/head/classes.html


RE: Custom gui - Rafa - 07-03-2011

Rozumiem, że legend odpowiada za menu kontekstowe dla panelu warstw. Czyli jeśli interesuje mnie menu rozwijane po prawym kliknięciu dla konfiguracji Tool Barów powinienem szukać klasy odpowiedzialnej za cały obszar ToolBarów i tam szukać metod typu addToPopup?


RE: Custom gui - borys - 07-03-2011

Obsługa toolbarów jest zaimplementowana na poziomie biblioteki Qt4 i obawiam się (choć głowy nie dam), że to menu jest jej integralną częścią. Ingerencja w ten mechanizm może być dość trudna, może po prostu trzeba zrezygnować ze standardowych toolbarów i napisać własną potomną klasę. Poszperaj w dokumentacji Qt.


RE: Custom gui - Rafa - 08-03-2011

Chcę wyłączyć panele: 'skala kafla' 'cofnij ponow' oraz 'podgląd' z prawego kliku więc próbowałem szukać tak jak mówisz.

Ten pierwszy link do metody klasy QgsLegendLayer::addToPopupMenu rozumiem że to klasa odpowiadająca za panel warstwy a metoda dodaje funkcjonalność do menu kontekstowego danego jako parametr typu QMenu?. Dziwna sprawa ale tutaj: http://doc.qgis.org/head/classes.html klasa qgslegendlayer jest nieobecna.


RE: Custom gui - borys - 09-03-2011

Bo nie ma jej w api. Trzeba zajrzeć w kod, jest w katalogu src/app/legend.

Panel z podglądem jest tworzony w QgisApp::createOverview(). Wprawdzie masz tam:
mPanelMenu->addAction( mOverviewDock->toggleViewAction() )
ale tu chodzi chyba tylko o menu Widok->Panele (tudzież Ustawienia->Panele), a nie to kontekstowe. Przypuszczam, że kontekstowe jest zaimplementowane na poziomie Qt i łapie wszystkie panele wstawiane do intefejsu.

Trzeba po prostu usunąć te panele z kodu programu, zamiast kombinować z ich włącznikiem. W przypadku podglądu trzeba wywalić metodę QgisApp::createOverview() oraz odwołania do niej i, rekursywnie, wszystkiego, co w tej metodzie powstało.
Trochę trzeba pogrepować drzewo źródeł Smile

Podobnie z pozostałymi. Wszystkie trzy powinny się dać bezpiecznie usunąć, bo żadna wtyczka chyba się do nich nie odwołuje.