¿Cómo puedo decirle a un QTableWidget a la final de la edición de una celda?

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

  •  21-08-2019
  •  | 
  •  

Pregunta

Voy a mostrar un menú emergente para seleccionar algunos valores en un QTableWidget.El menor elemento es un "Modificar" lista de entrada, cuando selecciono una nueva ventana debe aparecer automáticamente y el QComboBox debe desaparecer y la célula volver a Qt::DisplayRole estado.

Ahora Qt tiene todos esos bonitos API-llamadas como QTableWidget.edit() y QTableWidget.editItem(), lo que realmente estoy buscando es un QTableWidget.endEditing(), preferiblemente sin especificar el índice de la celda, a pesar de que podría conseguir que el uso de la presente convocatoria:

table.currentIndex()

... pero no sé si puedo garantizar que la celda actual es la celda que se está editando en todo momento.

Hay una API para cerrar ese tipo de editores?

Popup menu

¿Fue útil?

Solución

QTableWidget hereda 19 ranuras públicas de QWidget. Uno de ellos es setDisabled (), que debe desactivar los eventos de entrada para ese widget y todos sus hijos.

Me gustaría probar:

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

A pesar de que usted ha dicho que no funciona para usted, hay un método alternativo: Si no lo hace así (la tabla pierde el foco, creo), puede probar a usar EditTriggers . Por ejemplo:

table.setEditTriggers( QAbstractItemView::NoEditTriggers );

Otros consejos

table.setCurrentItem(None) es lo que funcionó para mí. (No se olvide de bloquear las señales si se utiliza alguna función ranura cellChanged / itemChanged.)

Este es con PyQt. Para C ++ Creo que reemplazar ninguno con NULL.

Es posible que pueda utilizar QTableWidget.closePersistentEditor () para cerrar el editor. Sin embargo, QAbstractItemView.closeEditor () puede estar más cerca de lo que usted quiere, especialmente ya que parece estar a gusto con la API basada en QModelIndex y ya está utilizando un widget editor personalizado.

No puedo hablar para los widgets de lista. Sin embargo, he llegado hasta aquí tratando de hacer algo similar.

I era doble clic en una celda, y sobre la base de la columna, la educación de un sub-forma con una lista, a continuación, cuando eso era movimiento cerrada a la siguiente columna apropiada basada en el valor seleccionado.

Mi problema era que podría conseguir el valor en la celda y "seleccionar" la siguiente celda apropiada, pero la célula original se quedó seleccionado en el modo de edición!

Finalmente me di cuenta de que mi doble clic seleccionaba la célula, es decir. edición.

Un solo clic selecciona la celda, pero no se abre un modo de edición.

Nota al margen: no pueden obtener de ese sub-forma de actuar verdaderamente modal, así que creé un bucle en forma de llamada: mientras que la forma de sub era visible, siendo el único código app.processEvents ()

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top