Pergunta

Em meu aplicativo tem uma janela dividida por um QSplitter, e eu preciso remover um widget.

Como posso fazer isso? Não consigo encontrar métodos úteis

Foi útil?

Solução

Muitas coisas na Qt não pode ser "tradicionalmente" removido. Em vez hide call () nele e destruir-lo. De QSplitter documentação :

Quando você oculta () uma criança a sua vontade espaço ser distribuída entre os outros crianças. Ele será reintegrado quando você mostra () novamente.

Outras dicas

Não está claro para mim se você quiser preservar o widget e colocá-lo em outro lugar, ou se você quer destruir o widget.

  • Destruir o widget: Se você puder obter um ponteiro para o widget, você pode simplesmente excluí-lo. O divisor será seguramente ser notificado de que seu filho é sendo excluído e irá removê-lo de si mesmo.

  • Preservar o widget: Se você grab o ponteiro para o widget, você pode basta definir o seu pai para algum outro widget e adicioná-lo para outro o layout do widget e ele vai aparecer há. Isto é seguro porque o QSplitter será notificado de que um de seus filhos está sendo reparented.

Se você quiser definir o pai de NULL (resposta de cjhuitt) estar ciente de que você está agora responsável pela limpeza que a memória porque o widget já não tem um pai.

Eu gosto de resposta de Tuminoid. Mas se você absolutamente necessário retirá-lo, tente obter o widget que deseja remover, e setParent( NULL ) convidando este widget. Esse é o meu melhor palpite.

Se você segurar um ponteiro para o widget, em seguida, basta apagá-lo ou usar deleteLater () se você quiser estar no lado seguro.

Se você não tem o ponteiro widget, use a função QSplitter :: widget (int index). Então, você pode usar invocação de seu slot deleteLater ().

Se você não tem o índice widget, mas você ainda sabe o widget objectName (), então QObject :: findChild () é a sua única maneira de obter o ponteiro do widget.

Eu corri para o mesmo problema. Em Qt 4.8 para temporalmente esconder um do widget de um QSplitter eu simplesmente escondê-lo. No entanto, não é suficiente, como a alça de divisão ainda está disponível para mover. Mas a alça pode ser acessado e escondido, bem como:

frameA->setVisible(conditionA);
frameB->setVisible(conditionB);
if ( !(conditionA && conditionB) ) // if only 1 frame is visible
{
   splitter->handle(0)->setVisible(false);
}

Outra forma fácil de evitar que o widget filho de ficar excluída é usar QSplitter.takeWidget (criança). Esta é também a maneira recomendada de remover o widget de um divisor. (Documentação Qt)

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