Topic: Applicazione con più finestre...  (Letto 1014 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline Bakuriu

  • python sapiens sapiens
  • ******
  • Post: 2.267
  • Punti reputazione: 2
  • Katon, Goukakyuu no jutsu!
    • Mostra profilo
    • Jack's Blackboard - Il mio blog
Applicazione con più finestre...
« il: Settembre 25, 2009, 17:24 »
Salve ragazzi, mi trovo alle prese con un problema...
A suo tempo avevo creato una piccola applicazione che utilizza un QDialog, adesso mi torna utile "all'interno" di  un altra, quindi ho deciso(più per provare che altro), di fare in modo che la mia applicazione sfruttasse la sua QMainWindow e aprisse l'applicazione vecchia.[edit:forse è poco chiaro...in pratica voglio creare un'applicazione stile GIMP, che ha 3 finestre separate...]
Ora però non riesco a capire bene come fare a farle comunicare.Nel senso che a me serve una comunicazione in entrambi i sensi e non solo MainWindow -> Dialog
Perchè il contenuto della MainWindow viene cambiato dall'utente, e io vorrei che la mia vecchia applicazione(che deve lavorare sull'input dell'utente), lavori sui dati "nuovi".
Ho già in mente alcune soluzioni...Anche se non mi piacciono molto.
Ad esempio potrei mettere un pulsante "Update" nella vecchia applicazione e usarlo per emettere un SIGNAL che la MainWindow cattura e far sì che la MainWindow aggiorni i dati del dialog,ma sinceramente penso che all'utente non piacerebbe dover cliccare sempre due pulsanti al posto di 1...
Seconda soluzione che mi è venuta in mente, reimplementare il metodo di slavataggio  in modo che ad ogni salvataggio si aggiorni il Dialog, ma così facendo l'utente è costretto a salvare prima di usare i comandi del Dialog.
Terza opzione che mi è venuta in mente mentre scrivo...
Connettere il Dialog ad un segnale della MainWindow a partire dalla MainWindow... visto che il Dialog viene richiamato dalla MainWindow non ho la possibilità di conneterlo alla MainWindow, ma se una volta creato nell'__init__ sella MainWindow io facessi una cosa tipo:
[hlpycode]
class Main(QtGui.QMainWindow):
    def __init__(self,parent=None):
        [omissis]
        self.finestra_dialog = finestra_dialog(opzioni_varie)
        self.finestra_dialog.connect(self.QtCore,SIGNAL("invioInfo(QString)"),
        self.finestra_dialog.ricevi_testo)
        self.connect(self.finestra_dialog,QtCore.SIGNAL("update_Request"),self.invia_update)
    def invia_update(self):
        data = self.prendiData()
        self.emit("invioInfo(QString)",QtCore.QString(data))
[/hlpycode]
Anche se effettivamente quest'ultima non l'ho provata...
Voi come fareste?
Perchè avevo anche pensato ai socket, ma io non li ho mai usati e facendo 2 prove ho visto che si incasina tutto...
« Ultima modifica: Settembre 25, 2009, 18:01 da Bakuriu »

Offline riko

  • python deus
  • *
  • moderatore
  • Post: 7.453
  • Punti reputazione: 12
    • Mostra profilo
    • RiK0 Tech Temple
Re: Applicazione con più finestre...
« Risposta #1 il: Settembre 25, 2009, 21:50 »
Struttura l'applicazione secondo un buon paradigma (nel tuo caso MVC dovrebbe andare)
e hai tutto gratis o quasi.

Offline Bakuriu

  • python sapiens sapiens
  • ******
  • Post: 2.267
  • Punti reputazione: 2
  • Katon, Goukakyuu no jutsu!
    • Mostra profilo
    • Jack's Blackboard - Il mio blog
Re: Applicazione con più finestre...
« Risposta #2 il: Settembre 25, 2009, 22:41 »
Ok, ma come faccio a farli comunicare?
nel senso, devo sfruttare i signal come ho fatto io oppure devo affidarmi a qualcos'altro?
Comunque non è che potresti spiegarmi cos'è il "MVC"? Perchè ho letto su wikipedia ma non mi convince...
Comunque domani proverò a scrivere qualcosa di ultra breve usando il "MVC" e posto quello che ne viene fuori, poi ditemi voi se è così che dovrebbe funzionare...

Edit:Ho trovato questo in cui dicono che in Qt bisognerebbe far comunicare i vari componenti proprio usando le signal and slots, quindi ero nella retta via :)
« Ultima modifica: Settembre 25, 2009, 22:53 da Bakuriu »

Offline riko

  • python deus
  • *
  • moderatore
  • Post: 7.453
  • Punti reputazione: 12
    • Mostra profilo
    • RiK0 Tech Temple
Re: Applicazione con più finestre...
« Risposta #3 il: Settembre 26, 2009, 09:15 »
MVC è la cosa giusta. Ma è una decisione a livello più alto del tuo problema, che ti permette di risolvere,
fra le varie cose, anche il tuo problema. NB, molti controlli di Qt sono già pensati e predisposti per essere
impiegati in un architettura MVC.

Offline Bakuriu

  • python sapiens sapiens
  • ******
  • Post: 2.267
  • Punti reputazione: 2
  • Katon, Goukakyuu no jutsu!
    • Mostra profilo
    • Jack's Blackboard - Il mio blog
Re: Applicazione con più finestre...
« Risposta #4 il: Settembre 26, 2009, 15:08 »
Ok ho trovato nelle doc di Qt e comincio a capire cos'è...
adesso devo capire come applicarlo al mio problema, senza contare che prima dovrò fare delle prove a parte per capire in pratica come lavorare...
comunque per chi avesse bisogno metto qui alcuni link utili per MVC&Qt:

Indice doc Qt4&MVC
Introduction
Model classes
Creating new models
View classes
Delegate classes
Using model and view