W mojej aplikacji ma okno podzielone przez QSplitter, i muszę usunąć widżet.Jak usunąć QWidgets z QSplitter
Jak mogę to zrobić? Nie mogę znaleźć użytecznych metod.
W mojej aplikacji ma okno podzielone przez QSplitter, i muszę usunąć widżet.Jak usunąć QWidgets z QSplitter
Jak mogę to zrobić? Nie mogę znaleźć użytecznych metod.
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.
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.
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.
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.
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)
podać link do dokumentu na takeWidget. – W55tKQbuRu28Q4xv
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);
}
Należy pamiętać, że po ustawieniu rodzica NULL widżet staje się główne okno ... (chyba że go ukryć w pierwszej kolejności.) –