Unklarheit zur Vorgehensweiße



  • Ich brauch mal einen Rat.

    Ich habe zwei Widgets, wobei das eine Über den Status des Anderen entscheidet.
    Konkret habe ich ein QTreeWidget und einen QwtPlot. Jedem QwtPlotItem wird ein QTreeWidgetItem zugeordnet, dabei entscheidet der Status des QTreeWidgetItems darüber ob das QwtPlotItem angezeigt wird oder nicht.

    Jetzt bin ich mir im unklaren wie ich diese zuordnung gestalten soll.

    Aktuell sieht das ganze so aus das alles in einer std::map gespeichert wird und über eine Funktion in der Klasse des Hauptfensters die Änderung des Status vollzogen wird. Was mir aber Schmerzen bereitet da es doch sehr nach Spagetticode aussieht.

    Mir würde jetzt spontan noch einfallen das ich das QTreeWidgetItem ableite und das QwtPlotItem als member übergebe. Was das ganze für meinen Geschmak ein wenig unflexibel macht...

    Würdet ihr hier etwas wie das Observer-Pattern heran ziehen?

    Was ist da eine smarte Vorgehensweise?



  • Werden die beiden Controls direkt nebeneinander angezeigt? Dann könntest du doch ein eigenes UserControl erzeugen, welches beide Controls beinhaltet - und in dessen Source dann die Logik (map) implementierst.

    PS: Gibt es auch Vorgehens"schwarze"? 😉



  • Th69 schrieb:

    Werden die beiden Controls direkt nebeneinander angezeigt?

    Nein leider nicht. Der Plot ist direkt im MainWindow platziert und Das QTreeWidgetItem in einem DockWidget.

    PS: Gibt es auch Vorgehens"schwarze"? 😉

    Eventuell 😉

    Edit:

    Mir ist gerade die Idee gekommen der abgeleiteten Variante von QTreeWidgetItem, welche schon besteht aber nichts besonderes kann, ein std::function Objekt zu übergeben, über das dann bestimmt werden kann was passiert. Damit würde ich keine Verbindung zwischen den beiden Widget herstellen, was mir besser gefallen würde.
    Was sagen Erfahrenere zu der Idee?



  • Keine Ahnung ob ich das Problem korrekt verstanden habe, aber mein erster Gedanke war ne Verbindung mittels Signal/Slot.



  • Tyrdal schrieb:

    Keine Ahnung ob ich das Problem korrekt verstanden habe, aber mein erster Gedanke war ne Verbindung mittels Signal/Slot.

    Die Idee ist mir auch schon gekommen, nur weiß ich akutell nicht wie am besten.



  • Wenn die beiden Controls so eng miteinander verkoppelt sind, dann erzeuge dir doch eine Controller-Klasse, welche beide Controls als Konstruktorparameter entgegennimmt (d.h. wo diese genau erzeugt und angezeigt werden ist hierfür egal). Und hierdrin kannst du dann die Logik implementieren.

    Und in der (Main)Window-Klasse hältst du dann eine Instanz dieser Controllerklasse, so ist der Code sauber voneinander getrennt.

    Wie die beiden Controls in der Controllerklasse dann miteinander kommunizieren, mußt du je nach Anwendungsfall entscheiden, also auf welches Signal (event) wie reagiert werden soll.



  • So in etwa hab ich mir das auch vorgestellt. Muss ich mal ausprobieren ob und wie das hin haut.



  • Ok ich habe das Ganze jetzt so gelöst das ich eine Spezialisierung von QTreeWidgetItem kreiert habe die ein übergebenes QwtPlotItem kontroliert.
    Ist für mich aktuell die smarteste Variante um alles unter einen Hut zu bekommen.


Log in to reply