current - ¿Cómo puedo decirle a un QTableWidget que termine de editar una celda?
qtablewidget example (4)
Puede utilizar QTableWidget.closePersistentEditor () para cerrar el editor. Sin embargo, QAbstractItemView.closeEditor () puede estar más cerca de lo que desea, especialmente porque parece que se siente cómodo con la API basada en QModelIndex y ya está utilizando un widget de editor personalizado.
Estoy mostrando un menú emergente para seleccionar algunos valores en un QTableWidget. El elemento más bajo es una entrada de "Modificar lista", cuando lo selecciono, una nueva ventana debería aparecer automáticamente y el QComboBox debería desaparecer y la celda volver al estado Qt :: DisplayRole.
Ahora Qt tiene todas esas agradables llamadas API como QTableWidget.edit()
y QTableWidget.editItem()
, lo que realmente estoy buscando es un QTableWidget.endEditing()
, preferiblemente sin especificar el índice de la celda, aunque podría obtener que usando esta llamada:
table.currentIndex()
... pero no sé si puedo garantizar que la celda actual sea la celda que se está editando en todo momento.
¿Hay una API para cerrar ese tipo de editores?
table.setCurrentItem(None)
es lo que funcionó para mí. (No olvide bloquear las señales si usa alguna función de ranura cellChanged / itemChanged).
Esto es con PyQt. Para C ++ creo que reemplazar ninguno con NULL.
No puedo hablar por los widgets de la lista. Pero, llegué aquí tratando de hacer algo similar.
Estaba haciendo doble clic en una celda y, en función de la columna, aparece un subformulario con una lista, luego, cuando estaba cerrado, pasa a la siguiente columna adecuada en función del valor seleccionado.
Mi problema era que podía obtener el valor en la celda y "seleccionar" la siguiente celda apropiada, pero la celda original permanecía seleccionada en el modo de edición.
Finalmente me di cuenta de que mi doble clic era seleccionar la celda, es decir. edición.
Un solo clic selecciona la celda pero no abre un modo de edición.
Nota al margen: nunca pude lograr que esa subformulación actuara de manera verdaderamente modal, por lo que creé un bucle en la forma de llamada: mientras que la subforma era visible, y el único código era app.processEvents ()
QTableWidget hereda 19 espacios públicos de QWidget. Uno de ellos es setDisabled (), que debería deshabilitar los eventos de entrada para ese widget y todos sus elementos secundarios.
Lo intentaré:
table.setDisabled( true );
table.setDisabled( false );
Aunque dijiste que no funcionaba para ti, existe un método alternativo: si no te gusta (creo que la mesa pierde el foco), puedes intentar usar EditTriggers . Por ejemplo:
table.setEditTriggers( QAbstractItemView::NoEditTriggers );