Sto utilizzando la libreria Qt Property Browser come editor di record. Quando l'utente ha completato le modifiche di un determinato campo, rimuovendo lo stato attivo dall'elemento di modifica o premendo il tasto Invio, voglio essere informato di ciò in modo che possa prendere la modifica, elaborarla e inviarla al REAL oggetto che è stato cambiato.QtPropertyBrowser e valore cambiato segnali
Purtroppo mi sembra di essere solo in grado di trovare i segnali PropertyChanged e ValueChanged e ottengono attivato ogni volta che viene aggiunto o rimosso, non solo quando l'utente sta provocando una finitura qualsiasi quantità di testo.
Senza poter ricevere questa notifica, non vedo come questo possa essere un componente utilizzabile. Non viene nemmeno ripristinato quando l'utente preme [ESC], che devo certamente essere in grado di implementare! Sicuramente devo sbagliarmi sul fatto che non c'è assolutamente alcun segnale che faccia ciò di cui ho bisogno, ma di certo non riesco a trovarlo.
Qualcuno sa?
Dopo aver esaminato il codice sorgente, le persone che hanno fatto la fabbrica line ha reso la sfortunata decisione di connettersi con textEdited piuttosto che editingFinished. Sarebbe una questione relativamente semplice da cambiare, tranne che il fatto abbastanza metodicamente ha reso impossibile estendere questa fabbrica di editor che ha un'interfaccia estensibile!
Tutto quello che dovrei fare è sovrascrivere la funzione createEditor, disconnettere la connessione non valida, connettere una connessione migliore con una chiamata in mezzo per ottenere la stringa fuori dal controllo di modifica della linea. Ma no!!! Non ti lasceremo fare! Metteremo tutte le cose contabili in una classe privata a cui non è possibile accedere o chiamare e quelle parti che lasceremo chiamare saranno strettamente associate al fatto che vengono chiamate dal modifica il controllo, NON da altro. ERGO, abbiamo reso la vita abbastanza frustrante impossibile da immaginare. Non siamo brillanti?
ho scoperto di più. L'approccio Qt standard per questi tipi di oggetti utilizza i delegati per controllare il comportamento che sto cercando di ottenere. La libreria di proprietà Qt sovrascrive questo comportamento e fa qualcos'altro che NON è quello che sto cercando di realizzare. All'interno dell'interfaccia QAbstractItemDelegate c'è una funzione setModelData chiamata dalla vista a cui è collegato quando l'utente esegue le modifiche; non viene chiamato quando distruggono l'editor senza commetterlo.
Il trucco successivo sarà l'apprendimento del modello Qt/Visualizza l'architettura e il patching della libreria per farlo nel modo giusto. Questo potrebbe anche non essere altro che la semplice rimozione degli stub sovrascritti che distruggono il comportamento che sto cercando di ottenere. Potrebbe anche essere che rinunciare all'uso di questo sistema al posto di usare semplicemente QtTreeView potrebbe essere una scelta migliore anche se sarebbe bello poter mantenere la possibilità di cambiare tra i diversi tipi di browser.
5 anni dopo e ho avuto la stessa sensazione di te. Ho fatto molti hack per rendere la griglia delle proprietà almeno un po 'come quella di .NET. – Jack