KDDockWidgets, a QDockWidget fejlett megvalósítási keretrendszere

KDQDockWidget

A KDAB Group szoftvertanácsadó cég, amely Qt, C++ és OpenGL alkalmazások fejlesztésével foglalkozik különböző platformokon (asztali, beágyazott és mobil), emellett oktatást is nyújt Qt alkalmazások fejlesztéséhez a nulláról , valamint minden népszerű keretrendszer Qt-re való migrálásához.

Az évek során a KDAB hozzájárult a QDockWidget fejlesztéséhez és finanszírozta azt . Mivel azonban a változtatások és hibajavítások megvalósítása sok napot vett igénybe, a QDockWidget használata rossz választásnak bizonyult, ami a KDDockWidgets létrehozásához vezetett.

A KDDockWidgets egy fejlett dokkoló keretrendszer a QDockWidgetshez , amely a QDockWidgets által nem támogatott funkciók hozzáadásával bővíti a használatát.

A QdockWidget natívan ötvözi a grafikus felhasználói felület kódját az állapotalapú logikával, ami nagyon megnehezíti az új funkciók hozzáadását, és jelentős implementációs bonyolultságot okoz a különböző platformokon. Számos grafikus felhasználói felület alapkomponenseként lehetővé teszi teljes ablakelemek (eszköztárak, widgetcsoportok stb.) áthelyezését a kívánt helyre.

A KDAB azonban azzal érvelt, hogy a QDockWidgets kód karbantartása nem túl egyszerű, kijelentve, hogy:

A KDDockWidgets abból adódott, hogy meg kellett őriznem az eszemet, miután két olyan projekten dolgoztam, amelyek kiterjedt testreszabást igényeltek. Olyan, ahol megpróbáltunk közvetlenül az áramlási irányban dolgozni, de a regresszió mértéke végül túl nagy volt.

És egy másik, ahol privát API-k, hamis egéresemények és eseményszűrők használatát választottam, ami először jó ötletnek tűnt, de végül a fájdalom világa lett. Ezenkívül ügyfeleink egyre kreatívabbak voltak a kéréseikkel, így egyértelmű volt, hogy jobb dokkolási keretre van szükségünk.

A fő probléma a felépítése , ami meglehetősen monolitikus, de konfigurálható (kiválaszthatjuk a felhasználó számára elérhető funkciókat, még akkor is, ha kevesen használják őket, animációkhoz), spagetti kóddal (szerényen keverve a logikát és a komponens állapotát). Ezért bármilyen változtatás nagyszámú regressziót hozhat létre.

Ezért döntött úgy a KDAB, hogy létrehozza a KDDockWidgets-et , amelynek célja a QDockWidgets tervezésének jelentős leegyszerűsítése, miközben megkönnyíti a konkrét helyzetekhez való alkalmazkodását.

A KDDockWidgets a következő funkciókat biztosítja:

  • Lehetőség van widgetek dokkolására egy lebegő ablakban és a csoport dokkolására a főablakhoz
  • Dokkoljon bármelyik ablakhoz, ne csak a főablakhoz
  • Dokkolás a főablak közepére
  • A fő ablakban levő levehető fülek támogatása a központi modulban
  • Lehetőség van leválasztani a füleket a dokkolási területen található fülsávról
  • Több fül kombinálásának lehetősége különféle összetevők kombinálásával.
  • Tegye közzé a belső súgómodulokat, hogy a felhasználó testreszabhatja őket, vagy megadhassa sajátjaikat.
  • Az alkatrészcsoportok szabadon válthatnak egy külső ablakból (amely csak ezt az összetevő csoportot tartalmazza) a főablakba (ez a szolgáltatás részben megvalósult a Qt 5.10-ben).
  • A fülmodulok testreszabása
  • Testreszabhatja a címsorokat
  • Az ablakkeretek testreszabása
  • Amellett, hogy kiemelik, hogy a fő változás pontos mutatók hozzáadása az elemek GUI-ból való eltávolításához, azon túl, hogy eltűnik a központi widget fogalma, mivel mint ilyen már nem egy speciális elem.

Az új szervezés egyértelműen elválasztja a logikát a grafikus felülettől , így az alapul szolgáló futásidejű motor könnyen újrafelhasználható a Qt Quick felületekhez (ami végső soron elvárt). Emellett megkönnyíti a felület testreszabását is; a felhasználók saját widgeteket adhatnak meg a felület bármely részéhez.

Továbbá a KDDockWidgets egy keretrendszerként készült, így könnyen felülírhatók a felületek, így testreszabható a viselkedés és a megjelenés. A KDDockWidgets egy nyílt forráskódú keretrendszer, amely GPLv2 és GPLv3 licenc alatt áll.

A KDDockWidgets kód, valamint annak demója a következő linken érhető el.


Hozzáadás előnyben részesített forrásként a Google-ben