Sto scrivendo un'applicazione gui. Voglio implementare la seguente struttura:
-
albero del progetto con nodi di diverso tipo e comportamento (ad esempio, quando si fa clic con il pulsante destro del mouse o si selezionano le opzioni del menu)
-
Finestra dell'editor, che può essere divisa dinamicamente in senso verticale e orizzontale, per aggiungere più aree di modifica . Ogni area di modifica corrisponde a un nodo di albero del progetto .
Sto usando c ++ / qt, ma ho il problema nella progettazione piuttosto che nella programmazione di linguaggi e librerie.
Al momento, per implementare albero del progetto ho creato un'interfaccia astratta del nodo dell'albero che contiene il link al genitore e ai bambini. Per ogni nodo di tipo specifico faccio una nuova classe. Perché sto usando Qt, ho un modello, che si comporta come un oggetto intermedio tra la vista e l'albero reale. Sembra corretto che le informazioni provenienti dalla rappresentazione visiva non possano trapelare su questo albero.
Ho i seguenti problemi con l'implementazione:
-
È giusto usare questo albero come titolare di tutti i miei dati? Posso usarlo per conservare informazioni sugli oggetti che sto modificando, o dovrei usare il titolare esterno per tutti i dati, ma hai un link ad esso dai miei nodi?
- In caso di conservazione di informazioni sugli oggetti, le informazioni sulla rappresentazione visiva, già passate agli oggetti (conoscono la struttura dell'albero).
- In caso di collegamento a un titolare esterno, non riesco a capire come creare tale collegamento e supportare la creazione / eliminazione dinamica dei nodi.
-
Quando faccio clic su Visualizza elemento, voglio in qualche modo rendere i dati all'interno del nodo da aprire per la modifica in area di modifica .
selezionata- Non riesco a capire come farlo senza dynamic_casting a un tipo specifico di nodo e passando quelle informazioni interne alla area di modifica attualmente selezionata.
- Un altro approccio dall'aspetto negativo, che mi viene in mente è quello di introdurre la funzione virtuale nel nodo, ma il nodo non può implementare la logica di questa funzione, perché si riferisce alla rappresentazione visiva.
Esempio di albero:
I modelli sono entità che possono essere modificate dal proprio editor di grafica vettoriale, Materiali è proprietà di valori-chiave simili a tabelle, in cui ogni chiave può essere associata ad alcune primitive nell'editor grafico.