Frage

In meiner Anwendung ein Fenster von einem QSplitter gespaltet hat, und ich brauche ein Widget zu entfernen.

Wie kann ich das tun? Ich kann nicht nützliche Methoden finden

War es hilfreich?

Lösung

Viele Dinge in Qt können nicht „traditionell“ entfernt werden. rufen stattdessen hide () auf sie und zerstören sie. Aus QSplitter Dokumentation:

  

Wenn Sie () ein Kind seinen Platz verstecken   werden unter den anderen verteilt   Kinder. Es wird wieder eingestellt, wenn   Sie zeigen () erneut.

Andere Tipps

Es ist mir nicht klar, wenn Sie das Widget bewahren wollen und ihn woanders, oder wenn Sie wollen das Widget zerstören.

  • Destroying das Widget: Wenn Sie einen Zeiger auf das Widget, können Sie einfach löschen. Der Splitter wird sicher mitgeteilt, dass ihr Kind werden gelöscht und es entfernen von selbst.

  • Die Erhaltung der widget: Wenn Sie greifen     der Zeiger auf das Widget, können Sie     einfach eingestellt seine Eltern zu einem anderen     Widget und fügen Sie ihn in einem anderen     Widget Layout und es wird sich zeigen     Dort. Dies ist sicher, weil die     QSplitter wird, dass eine Benachrichtigung     seiner Kinder ist neubeeltert wird.

Wenn Sie möchten, werden die Eltern auf NULL (cjhuitt Antwort) bewusst setzen, dass Sie jetzt verantwortlich sind für diesen Speicher Reinigung, da das Widget nicht mehr ein Elternteil hat.

Ich mag Tuminoid Antwort. Aber wenn Sie es unbedingt entfernt werden müssen, versuchen Sie das Widget bekommen Sie entfernen möchten, und rufen setParent( NULL ) auf diesem Widget. Das ist meine beste Vermutung.

Wenn Sie einen Zeiger auf das Widget halten, dann ist es einfach löschen oder verwenden deleteLater (), wenn Sie auf der sicheren Seite sein wollen.

Wenn Sie nicht über das Widget Zeiger haben, verwenden Sie QSplitter :: Widget (int index) -Funktion. Dann können Sie mit seiner deleteLater () Steckplatz aufrufen.

Wenn Sie nicht über das Widget Index haben, aber Sie wissen noch das Widget ObjektName (), dann QObject :: findChild () ist der einzige Weg, um das Widget Zeiger zu erhalten.

Ich lief in das gleiche Problem. In Qt 4.8 verstecken zeitlich eines der Widget eines QSplitter ich einfach ausblenden. Allerdings ist es nicht genug, wie der Splitter Griff noch verfügbar ist zu bewegen. Aber der Griff kann auch zugegriffen und ausgeblendet werden:

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

Eine weitere einfache Möglichkeit, das Kind-Widget von immer gelöscht zu verhindern ist QSplitter.takeWidget (Kind) zu verwenden. Dies ist auch die empfohlene Methode, um das Widget von einem Splitter zu entfernen. (Qt-Dokumentation)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top