E
Mechanics schrieb:
Eisflamme schrieb:
Das ist wieder nur ein Ausschnitt, aber ich hoffe, der repräsentiert jetzt genug.
Hmm, du hast mich noch nicht überzeugt, warum du in der GUI Templates brauchst. Es geht doch eigentlich um SpecialDisplayTable? Die einzige Stelle, wo du da deinen Templateparameter verwendest, ist die Stelle, um an "NumberType" zu kommen.
Ich habe nun wirklich mehrfach beschrieben, dass ich es darauf reduziert habe und es eigentlich 5-6 Methoden sind. Dass es sonst mit einem std::function erledigt wäre, habe ich auch verstanden und in diesem Thread mindestens drei Mal angemerkt... Hm, andere Informationen beziehen sich wirklich aufs Schreiben, Lesen und auf Informationen, die zur Darstellung notwendig sind.
Spricht was dagegen, ein AbstractItemView draus zu machen? Sorry, wenn das schon kam, ich hab die ersten Posts nicht sehr aufmerksam verfolgt.
Ich bin damit nicht so besonders firm, aber wieso überhaupt ItemView (und nicht TableView)? Und wenn ich die Maus gedrückt halte und über mehrere Felder gehe, kann ich dann Mehrfachmarkierungen machen? Auch für die Grafik: Ich glaube, ich müsste mehr mit Stylesheets und speziellen Event-Überladungen arbeiten, als es Aufwand ist, einfach gleich selbst ein View basierend auf einem Label zu basteln.
Dann könntest du ein Qt Model übergeben und daraus die Daten ziehen. Und da könntest du statt deinem eigentlichen Model problemlos ein FilterModel übergeben.
Gut, dann gibt es noch zwei Arten des Ausgegrautseins, aber das könnte man da reinstecken. ForegroundRole mag ich nicht, ich habe für die Tabelle ein komplett eigenes Farbset, mit Farbverläufen uvm. Man könnte es dennoch entkoppeln, da hast Du Recht. Da das QT-Model aber ohnehin niemals meine Geschäftslogik ersetzt, hätte ich die Form "Geschäftslogik" <-> Model <-> View+Controller, und Model würde hier nur als Adapter (oder laut Dir Controller) fundieren. Ich gewinne dadurch aber dann nichts, wenn M : V+C dem Verhältnis 1:1 entspricht, was auf Grund des Spezialisierungsgrades meiner Anzeige der Fall ist (und bleiben wird).
Entkopplung ist für diesen Fall kein Selbstzweck (oh, da ist die Menge empört :)), wo habe ich hier wirklich Vorteile?
Vielleicht kann man ja ein std::function Objekt übergeben, das die eine Zusatzinformation liefert, die du brauchst.
Habe ich schon mehrfach oben diskutiert, ich bräuchte viel mehr als eins.
Also, vielleicht machen Templates hier schon Sinn, aber ich hoffe du siehst, warum du mich noch nicht überzeugt hast.
Ja, sehe ich. Resultiert aber imo daraus, dass ich hier nicht mein Gesamtprojekt offenlege, sondern nur einen Teil, was aber auch bei der Komplexität imo kaum anders geht. Aber es ist gut zu checken, ob andere wirklich anders denken oder ob mein Fall tatsächlich ein Spezialfall ist. Ich komme immer mehr zur Schlussfolgerung, dass letzteres der Fall ist. Trotzdem lerne ich hier einiges, ist also in jedem Fall wertvolles Informationsmaterial.
Dazu auch Deine passende Aussage:
Ein von QAbstractItemModel abgeleitetes AssemblyItemModel für die Darstellung in einer Baumansicht gibts natürlich auch, aber das ist nur ein Adapter, das ist kein Model und wird nur für die GUI verwendet.
Meine eigentlichen Daten sind in gewisser Weise schon vielfältig. Tabellenform ist Anzeigeform, Textform ist Anzeigeform oder anders: Es sind Repräsentationen der Daten (es gibt noch eine Dritte). Die Daten selbst sind auch in einem gewissen Datenschema abgelegt, doch das möchte ich ggü. dem QT-Model natürlich blackboxen. Und QT-Models als Adapter für die Anzeige zu verwenden, ist genau richtig. Individuelle und komplexe Typen mit einer stereotypischen Klasse für Listen/Tabellendaten zu erschlagen bzw. da hineinzupressen empfinde ich als schlechten Stil. Wenn es perfekt passt, könnte man es tun, aber selbst dann finde ich es besser Geschäftslogik nochmal für sich abzubilden und erst dann ein QT-Model dazwischenzulegen, auch wenn die Abbildung hier mehr oder minder 1:1 wäre. Grund: Alle Geschäftslogikdaten sind QT-unabhängig und v.a. stehen die auf einer Ebene für sich. Aber das ist für mich nur ein stilistischer Bonus, den man nicht teilen muss (aber sollte :p). Ich schweife ab.
Grundsätzlich kannst du natürlich auch in Qt Widgets als templates verwenden.
Nur hast du dabei folgende Einschränkungen (zumindestens für Qt4).
Der OP dieses Threads trägt der Tatsache Rechnung, dass es die Einschränkungen gibt, sprich: Genau diese Dinge waren mir schon vor Beginn des Threads bewusst. Die Folgediskussion hat sich ja erst dadurch ergeben, dass mein Design basierend auf unvollständigen Informationen angezweifelt wurde (aber das öffnet Horizont und führt zu Lernerkenntnissen, daher ist das gar nicht so negativ gemeint, wie es vielleicht klingt :)).