Beispielcode:Müssen Sie QValidator manuell löschen?
QDoubleValidator *validator = new QDoubleValidator();
myInputLineEdit->setValidator(validator);
// delete validator;
Hinweis: myInputLineEdit ist ein QLineEdit Zeiger und wird mit ihrer Mutter gelöscht werden.
Meine Frage ist, wann sollte ich Validator löschen, wie es manuell erstellt wird und setValidator() scheint nicht den Besitz dieses Zeigers gemäß der Dokumentation zu übernehmen? Wenn ich es nicht lösche, wird es ein Speicherleck sein?
Ich habe versucht, es gleich danach zu löschen, wie der kommentierte Code, und ich bemerkte, dass der Validator von myInputLineEdit danach 0 wurde. Ich denke also, ich muss es löschen, nachdem myInputLineEdit gelöscht wurde.
Ein anderer Gedanke ist, ich könnte Validator ein Elternteil geben, so dass es zusammen mit seinem parrent gelöscht wird, ist das ein guter Weg, das zu tun? Was, wenn es keinen guten Kandidaten gibt, der Elternteil zu sein?
Dank
Wenn Sie sich für den Grund interessieren, warum 'setValidator' keine Eigentumsrechte übernimmt, liegt das wahrscheinlich daran, dass Sie denselben Validator für mehrere Eingabe-Widgets verwenden können.Aber QObjects haben keinen gemeinsamen Besitz, sondern stattdessen * unique * parent-ownership, also müssen Sie den Elternteil auf * some * widget setzen (entweder die Zeile bearbeiten oder ein Elternteil davon, was am meisten Sinn macht). – leemes