Konstantes Signal möglich?

Verschiedenes zu Qt
deedw
Beiträge: 15
Registriert: 19. April 2010 13:09

Beitrag von deedw »

Interessant ist eigentlich nur
Leichter geschrieben als getan ... Ich kann Dir nur zu dem vierten Punkt eine Antwort geben und bei den anderen mit den Achseln zucken. :( Aber mal schauen ...

zu 4. Modelliert wird das Laden von geometrischen Daten. Sprich in einer Datei steht sowas wie "Hier fängt ein Kreis an von A nach B" oder "Das ist eine Gerade von X nach Y". Die Daten werden aus der Datei extrahiert und in einzelne geometrische Objekte gesteckt. Die werden dann diskret abgetastet, um sie auf dem Bildschirm darzustellen.

zu 3. Es gibt bisher auch keine echten Schichten. Am ehesten könnte man es noch einteilen in:
* GUI
* Viewer
* Szene
* Geometrischen Daten

Wobei aber jede Schicht auf jede zugreifen kann, was ich unterbinden will.

zu 1. Wie gesagt ist das bisher ein Ein-Mann-Projekt, es gibt keine definierten Schnittstellen. Es soll aber eine über der Szene (oben) engezogen werden, damit man den Viewer und die GUI austauschen kann.
Schau dich mal schlau in boost.signals / boost.signals2.
Ich habe nur Qt 4.5.2 zur Verfügung. Andere Abhängigkeiten sind tabu.

Viele Grüße
Dee
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

deedw hat geschrieben:zu 3. Es gibt bisher auch keine echten Schichten. Am ehesten könnte man es noch einteilen in:
* GUI
* Viewer
* Szene
* Geometrischen Daten
Argh, und ich hab bisher gedacht, du hättest deine Daten in verschiedene übereinander gelegte Schichten gepackt, um irgend welche speziellen Optimierungen umzusetzen. (Datengenauigkeit bei verschiedenen Levels, Aufteilen der Suche in einzelnen Teilbereichen, evtl. gleich mit Threads, ...)
Ich hab jetzt die ganze Zeit gemeint, dass du bei einer Selektion immer tiefer in den Schichten wanderst, und eben dann deine gefundenen Ergebnisse die ganzen Schichten wieder per Signal/Slot hoch reichst...
Aber in deinem jetzigen Kontext ist es schon möglich, dass deine Datenstruktur sich über ein SIGNAL meldet. Du kannst im Übrigen SIGNAL auf SIGNAL verbinden. Dann brauchst du in der Scene keinen eigenen SLOT, in dem du nur die Daten aus deiner Struktur empfängst und wieder emit()est. Wobei es darauf ankommt, in wieweit Scene ein Wrapper um "Geometrische Daten" ist. Ist "Geometrische Daten" eine eigene Klasse/Struktur, oder hält die Szene die Daten?

Aber im Prinzip ist das genau die Anordnung die du für ein Qt Model/View hast ;)
Scene == QAbstractItemModel, View == QAbstractItemView, Geometrische Daten sind deine darunter liegende Datenstruktur.
Schau dich mal schlau in boost.signals / boost.signals2.
Ich habe nur Qt 4.5.2 zur Verfügung. Andere Abhängigkeiten sind tabu.
Linking against the Signals2 library

Unlike the original Boost.Signals library, Boost.Signals2 is currently header-only.
Heißt Header Dateien ins Projekt kopieren, fertig :)
Ich hab aber eher gemeint, dass das eine recht verbreitete Lösung für SIGNAL/SLOT-Verbindungen ist, die eben auf templates setzt, damit du ein Feeling für die Unterschiede bekommst. Verwenden musst du es ja nicht :)
Du hättest dadurch halt den Vorteil, dass du so einen Mechanismus in deine Datenstruktur reinholen kannst, ohne dich dort von Qt abhängig zu machen ;)
deedw
Beiträge: 15
Registriert: 19. April 2010 13:09

Beitrag von deedw »

Argh, und ich hab bisher gedacht, du hättest deine Daten in verschiedene übereinander gelegte Schichten gepackt, um irgend welche speziellen Optimierungen umzusetzen.
Äh, nein. Das Schichtenmodell dient allein einer besseren Struktur. Daneben werden die Schichten nicht im Vorherein festgelegt, sondern ergeben sich teilweise auch aus der Aufrufreihenfolge und den Abhängigkeiten. Es soll aber natürlich darauf geachtet werden, dass Low-Level-Klassen (mathematische Vektoren, spezielle Arrays etc.) ganz unten liegen, die geometrischen Objekte z.B. eine Schicht darüber, da sie nicht nur Daten halten, sondern auch auswerten, und die GUI muss mit dem Viewer irgendwo ganz oben liegen, da sie die Schnittstelle zum Endbenutzer sind.

Zum besseren Verständnis zeichne ich mal ein kleines Bildchen (siehe unten), wie der aktuelle Zustand ist. Wie Du siehst, ist das schon schichtenähnlich (Zugriffe nach oben habe ich nicht dargestellt), aber von MVC kann man nicht reden.

Zur Erklärung: Das geometrische Objekt hält die Selektion (Anzahl diskreter Punkt = Größe des Booleschen Arrays), das Szenenobjekt selektiert aber. Diese Daten, welcher Punkt selektiert/deselektiert wurde, muss an den Viewer gereicht werden.

Ich bin nach Deinem letzten Posting unsicher, was nun der bessere Ansatz ist. Ein Array vom Viewer nach unten geben, damit es vom Szenenobjekt befüllt wird. Oder alles ab und oberhalb des Szenenobjektes von QObject ableiten und per Signal nach oben geben. (Hinweis: Das Bild ist immer noch vereinfacht. Die ganzen Listen-Klassen, die Objekte halten, habe ich nicht eingezeichnet. Der Weg nahc oben wird also länger.)
Wobei es darauf ankommt, in wieweit Scene ein Wrapper um "Geometrische Daten" ist. Ist "Geometrische Daten" eine eigene Klasse/Struktur, oder hält die Szene die Daten?
Das Bild macht es hoffentlich klar. GeoDaten ist ein Objekt, Szenenobjekt ist ein Wrapper, Szene enthält viele Szenenobjekte.
Aber im Prinzip ist das genau die Anordnung die du für ein Qt Model/View hast
Da ist bei uns die Konstellation wieder unglücklich. Ich entwickle nämlich derzeit mit Qt 3.3.8. Wenn ich fertig mit kapseln bin, portiere ich auf Qt 4.5.2 mithilfe von qt3to4. Aber ich werde danach keine Umstrukturierungen mehr vornehmen. (Die Idee war, dass der Aufwand so geringer ist, weil man die gekapselten Pakete/Module einfacher nach Qt4 wandeln kann, als erst das ganze große Projekt.)
Heißt Header Dateien ins Projekt kopieren, fertig
Und danach zig Formulare ausfüllen, um die Erlaubnis zur Benutzung einzuholen. ;) (Nein, nicht die Erlaubnis der Boost-Entwickler ...)

Aber ich hab mal reingeschaut und es sieht schon interessant aus. Privat werde ich darauf ggf. mal zurückgreifen.

Viele Grüße
Dee
Dateianhänge
Geometrie-Diagramm
Geometrie-Diagramm
geometrie-scaled.png (14.91 KiB) 1674 mal betrachtet
Antworten