KDDockWidgets, en avanceret implementeringsramme for QDockWidget

KDQDockWidget

KDAB Group er et softwarekonsulentfirma til Qt-, C++- og OpenGL-applikationer til forskellige platforme (desktop, embedded og mobile), udover at tilbyde vejledning i at udvikle Qt-applikationer fra bunden og i migreringen af ​​alle populære frameworks til Qt.

Gennem årene har KDAB bidraget til og finansieret udviklingen af ​​QDockWidget . Men fordi ændringer og fejlrettelser tog mange dage at implementere, viste det sig at være et dårligt valg at bruge QDockWidget, hvilket førte til oprettelsen af ​​KDDockWidgets.

KDDockWidgets er et avanceret docking-framework til QDockWidgets , som udvider dets anvendelse ved at tilføje funktioner, der ikke understøttes af QDockWidgets.

QdockWidget kombinerer GUI-kode med stateful logic, hvilket gør det meget vanskeligt at tilføje nye funktioner og forårsager betydelig implementeringskompleksitet på tværs af forskellige platforme. Som en kernekomponent i adskillige grafiske brugergrænseflader giver det dig mulighed for at flytte hele vindueselementer (værktøjslinjer, widgetgrupper osv.) hvorhen du vil.

KDAB argumenterede dog for, at det ikke er særlig nemt at vedligeholde QDockWidgets-koden, og sagde at:

KDDockWidgets blev født ud af mit behov for at bevare min sundhed efter at have arbejdet på to projekter, der krævede omfattende tilpasning. En, hvor vi forsøgte at arbejde direkte opstrøms, men regressionstakten endte med at blive for meget.

Og en anden, hvor jeg tog ruten med at bruge private API'er, falske musebegivenheder og begivenhedsfiltre, som i starten virkede som en god idé, men som ender med at blive en verden af ​​smerte. Vores klienter blev også mere kreative med deres anmodninger, så det var klart, at vi havde brug for en bedre docking-ramme.

Hovedproblemet er designet , som er ret monolitisk, men konfigurerbart (vi kan vælge de funktioner, der er tilgængelige for brugeren, selvom få bruger dem, til animationer), med spaghettikode (som heldigvis blander logik og komponenttilstand). Derfor kan enhver ændring skabe et stort antal regressioner.

Derfor har KDAB besluttet at oprette KDDockWidgets , som har til formål at forenkle designet af QDockWidgets betydeligt, samtidig med at det letter dets tilpasning til bestemte situationer.

KDDockWidgets indeholder følgende funktioner:

  • At være i stand til at forankre widgets i et flydende vindue og forankre den gruppe til hovedvinduet
  • Dock til ethvert vindue, ikke kun hovedvinduet
  • Docking til midten af ​​hovedvinduet
  • Understøttelse af aftagelige faner i den centrale widget i hovedvinduet
  • At kunne løsne faner fra en fanebjælke i et dockingområde
  • Evne til at kombinere flere faner ved at kombinere flere komponenter.
  • Udsæt interne hjælp-widgets, så brugeren kan tilpasse dem eller levere deres egne.
  • Komponentgrupper kan frit skifte fra et eksternt vindue (som kun indeholder denne komponentgruppe) til hovedvinduet (en funktion delvist implementeret i Qt 5.10).
  • Tilpas fane-widgets
  • Tilpas titellinjer
  • Tilpas vinduesrammer
  • Ud over at fremhæve, at den vigtigste ændring er tilføjelsen af ​​nøjagtige indikatorer for at fjerne elementer fra GUI, ud over det faktum, at begrebet central widget forsvinder, da det som sådan ikke længere er et specifikt element.

Den nye organisering adskiller tydeligt logikken fra den grafiske brugerflade , så den underliggende runtime-motor nemt kan genbruges til Qt Quick-grænseflader (hvilket i sidste ende forventes). Det letter også brugerfladetilpasning; brugerne kan levere deres egne widgets til enhver del af brugerfladen.

Derudover er KDDockWidgets beregnet til at være et framework, så du nemt kan tilsidesætte grænsefladerne for at give brugerdefineret adfærd og udseende. KDDockWidgets er et open source-framework, licenseret under GPLv2- og GPLv3-licenserne.

KDDockWidgets-koden, såvel som en demo af den, er tilgængelig på følgende link.


Tilføj som foretrukken kilde i Google