Come posso dire una QTableWidget per terminare la modifica di una cella?

StackOverflow https://stackoverflow.com/questions/518447

  •  21-08-2019
  •  | 
  •  

Domanda

sto mostrando un menu a comparsa per selezionare alcuni valori in un QTableWidget. La voce più basso è una voce "lista Modifica", quando si seleziona una nuova finestra dovrebbe apparire automaticamente e la QComboBox dovrebbe sparire e il ritorno delle cellule ad uno stato Qt :: DisplayRole.

Ora Qt ha tutte quelle belle API-chiamate come QTableWidget.edit() e QTableWidget.editItem(), quello che sto veramente cercando è un QTableWidget.endEditing(), preferibilmente senza che specifica l'indice della cella, anche se ho potuto ottenere che l'utilizzo di questo chiamare:

table.currentIndex()

... ma non so se posso garantire che la cella corrente è la cella in fase di modifica in qualsiasi momento.

C'è un'API per chiudere questo tipo di editori?

Menu di contesto

È stato utile?

Soluzione

QTableWidget eredita 19 slot pubbliche da QWidget. Uno di questi è setDisabled (), che dovrebbe disattivare gli eventi di input per questo widget e tutti i suoi figli.

Vorrei provare:

table.setDisabled( true );
table.setDisabled( false );

Anche se lei ha detto che non funziona per voi, non v'è un metodo alternativo: Se non ti piace che (la tabella non è più attivo, credo), si può provare a utilizzare EditTriggers . Ad esempio:

table.setEditTriggers( QAbstractItemView::NoEditTriggers );

Altri suggerimenti

table.setCurrentItem(None) è ciò che ha funzionato per me. (Non dimenticare di bloccare i segnali se si utilizza una qualche funzione di slot cellChanged / itemChanged.)

Questo è con PyQt. Per C ++ Penso sostituire Nessuno con NULL.

Si può essere in grado di utilizzare QTableWidget.closePersistentEditor () per chiudere l'editor. Tuttavia, QAbstractItemView.closeEditor () può essere più vicino a ciò che si vuole, soprattutto perché ti sembra di stare bene con l'API QModelIndex-based e sta già utilizzando un widget editor personalizzato.

Non posso parlare per i widget della lista. Ma, mi sono qui a cercare di fare qualcosa di simile.

ero doppio clic su una cella, e sulla base della colonna, portando un sotto-modulo con una lista, allora quando era chiuso vengono spostate colonna successiva appropriato in base al valore selezionato.

Il mio problema era ho potuto ottenere il valore nella cella e "selezionare" la cella successiva del caso, ma la cellula originaria rimase selezionato nella modalità di modifica!

E 'finalmente aggiornato su di me che il mio doppio clic è stato selezionare la cella, vale a dire. la modifica.

Un singolo click seleziona la cella, ma non si apre una modalità di modifica.

Nota a margine: non avrebbe mai potuto ottenere quel sotto-forma di agire veramente modale, così ho creato un ciclo sotto forma di chiamata: mentre la forma sub era visibile, con l'unico codice essendo app.processEvents ()

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top