Domanda

Nella mia app hanno una finestra a spacco da un QSplitter, e ho bisogno di rimuovere un widget.

Come posso fare questo? Non riesco a trovare metodi utili

È stato utile?

Soluzione

Molte cose in Qt non possono essere "tradizionalmente" rimosso. Invece chiamare hide () su di esso e distruggere esso. Da QSplitter documentazione:

  

Quando si nasconde () un bambino il suo spazio sarà   essere distribuiti tra gli altri   bambini. Sarà ripristinato quando   si mostra () di nuovo.

Altri suggerimenti

Non è chiaro a me se si desidera conservare il widget e metterlo da qualche altra parte, o se si vuole distruggere il widget.

  • Distruggere il widget: Se è possibile ottenere un puntatore al widget, è possibile semplicemente eliminarlo. Lo splitter tranquillamente essere notificato che il suo bambino è di essere eliminati e che elimina da se stessa.

  • Preservare il widget: Se si afferra     il puntatore al widget, è possibile     è sufficiente impostare il suo genitore per qualche altro     Widget e aggiungerlo ad un altro     il layout di widget e si riveleranno     Là. Questo è sicuro perché il     QSplitter verrà informato che uno     dei suoi figli viene reparented.

Se si desidera impostare il genitore a NULL (risposta di cjhuitt) essere consapevoli del fatto che si è ora responsabile della pulizia che la memoria perché il widget non ha più un genitore.

Mi piace la risposta di Tuminoid. Ma se è assolutamente necessario che venga rimossa, provare a ottenere il widget che si desidera rimuovere, e chiamando setParent( NULL ) su quel widget. Questa è la mia ipotesi migliore.

Se si tiene un puntatore al widget, poi basta eliminarlo, o utilizzare deleteLater () se si vuole essere sul sicuro.

Se non si dispone il puntatore del widget, utilizzare QSplitter :: widget di (int index) la funzione. Quindi, è possibile utilizzare richiamare slot deleteLater ().

Se non si dispone l'indice widget di, ma è ancora conosce il widget di objectName (), poi QObject :: findChild () è il vostro unico modo per ottenere il puntatore del widget.

Ho incontrato lo stesso problema. In Qt 4.8 per nascondere temporaneamente uno del widget di un QSplitter ho semplicemente nasconderlo. Tuttavia non è sufficiente, come la maniglia splitter è ancora disponibile a muoversi. Ma la maniglia può essere letta e nascosto così:

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

Un altro modo semplice per evitare che il widget di bambino da essere eliminati è quello di utilizzare QSplitter.takeWidget (bambino). Questo è anche il metodo consigliato di rimuovere il widget da un divisore. (Documentazione Qt)

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