Como posso saber a QTableWidget para terminar a edição de uma célula?

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

  •  21-08-2019
  •  | 
  •  

Pergunta

Estou mostrando um menu pop-up para selecionar alguns valores em uma QTableWidget. O item mais baixo é uma entrada "lista Modificar", quando eu selecioná-lo uma nova janela deve aparecer automaticamente eo QComboBox deve desaparecer e o retorno da célula a um estado Qt :: DisplayRole.

Agora Qt tem todas aquelas simpáticas API-chamadas como QTableWidget.edit() e QTableWidget.editItem(), o que eu realmente estou procurando é um QTableWidget.endEditing(), de preferência sem especificar o índice da célula, embora eu poderia ter que usar esta chamada:

table.currentIndex()

... mas eu não sei se eu posso garantir que a célula atual é a célula que está sendo editado em todos os momentos.

Existe uma API para fechar esse tipo de editores?

Menu Popup

Foi útil?

Solução

QTableWidget herda 19 ranhuras públicas de QWidget. Uma delas é setDisabled (), que deve desativar eventos de entrada para esse widget e todos os seus filhos.

Gostaria de tentar:

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

Embora você disse que não funciona para você, não há um método alternativo: Se você não gosta de que (a tabela perde o foco, eu acredito), você pode tentar usar EditTriggers . Por exemplo:

table.setEditTriggers( QAbstractItemView::NoEditTriggers );

Outras dicas

table.setCurrentItem(None) é o que funcionou para mim. (Não se esqueça de bloquear os sinais se você usar algum cellChanged / ItemChanged função slot.)

Este é com PyQt. Para C ++ Eu acho substituir Nenhum com NULL.

Você pode ser capaz de usar QTableWidget.closePersistentEditor () para fechar o editor. No entanto, QAbstractItemView.closeEditor () pode estar mais perto do que você quer, especialmente desde que você parece estar confortável com a API baseada em QModelIndex e já estão usando um widget de editor personalizado.

Eu não posso falar para a lista de widgets. Mas, eu tenho aqui tentando fazer algo semelhante.

I foi duplo clique sobre uma célula, e com base na coluna, trazendo-se uma sub-forma com uma lista, em seguida, quando esse movimento foi fechada para a próxima coluna apropriada com base no valor seleccionado.

Meu problema era que eu poderia obter o valor na célula e "selecionar" a próxima célula apropriado, mas a célula original ficou selecionado no modo de edição!

Ele finalmente me dei conta de que meu duplo-clique foi selecionando a célula, ou seja. edição.

Um único clique seleciona a célula, mas não abre um modo de edição.

Nota lateral: Nunca poderia obter esse sub-forma de agir verdadeiramente modal, então eu criei um laço na forma chamando: enquanto a forma sub era visível, com as únicas app.processEvents código que está sendo ()

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top