2008-12-16 13 views

Odpowiedz

10

Wiele rzeczy w Qt nie może być "tradycyjnie" usuniętych. Zamiast tego wywołaj hide() i zniszcz go. Od QSplitter dokumentacji:

Po ukryciu() dziecko jego przestrzeń będzie być rozprowadzane wśród innych dzieci. Zostanie przywrócona, gdy ponownie wyświetlisz() go ponownie.

1

Podoba mi się odpowiedź Tuminoida. Ale jeśli absolutnie potrzebujesz go usunąć, spróbuj uzyskać widget, który chcesz usunąć, i wywołując setParent(NULL) na tym widżecie. To moje najlepsze przypuszczenie.

19

Nie jest dla mnie jasne, czy chcesz zachować widget i umieścić go w innym miejscu, czy też chcesz zniszczyć widżet.

  • Niszczenie widżet: Jeśli można uzyskać wskaźnik do widżetu można po prostu usunąć. Splitter będzie bezpiecznie zostać powiadomiony, że jego dziecko jest usunięte i usunie z siebie .

  • Zachowanie widżet: Jeśli chwycić wskaźnik do widżetu można wystarczy ustawić jego rodzica do jakiegoś innego widget i dodać go do układu innego widgetu i pokaże się tam. Jest to bezpieczne, ponieważ urządzenie QSplitter zostanie powiadomione o tym, że jeden z potomków jest ponownie przesyłany.

Jeśli chcesz ustawić rodzica na NULL (odpowiedź cjhuitt'S) mieć świadomość, że jesteś teraz odpowiedzialny za czyszczenie tej pamięci, ponieważ widżet nie ma już rodziców.

+2

Należy pamiętać, że po ustawieniu rodzica NULL widżet staje się główne okno ... (chyba że go ukryć w pierwszej kolejności.) –

0

Jeśli przytrzymasz wskaźnik na widżecie, po prostu go skasuj lub użyj metody deleteLater(), jeśli chcesz być po bezpiecznej stronie.

Jeśli nie masz wskaźnika widgetu, użyj funkcji QSplitter :: widget (int index). Następnie możesz użyć wywołania jego slotu deleteLater().

Jeśli nie masz indeksu widgetu, ale nadal znasz widget objectName(), to QObject :: findChild() to jedyny sposób na uzyskanie wskaźnika widgetu.

0

Innym prostym sposobem na uniknięcie usunięcia widgetu potomnego jest użycie QSplitter.takeWidget (child). Jest to również zalecany sposób usuwania widgetu z rozdzielacza. (Dokumentacja Qt)

+2

podać link do dokumentu na takeWidget. – W55tKQbuRu28Q4xv

0

Wpadłem na ten sam problem. W Qt 4.8, aby tymczasowo ukryć jeden z widżetów QSplittera, po prostu go ukrywam. Jednak to nie wystarczy, ponieważ uchwyt łuparki jest nadal dostępny do przenoszenia.Ale uchwyt może być dostępne i ukryte, a także:

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