Pointer auf Parameter in Klasse nur readonly (Wieso ?)
-
Hallo Leute,
wieso ist bei der folgenden Verwendung der Pointer Usr nach dem
Programmverhalten "const".public: UserLogin(QWidget *parent = 0, User *Usr = 0);
Ich kann die Werte der Klasse User lesen, aber nicht ändern.
Was mache ich falsch ?
Gruss
-
Ritchie schrieb:
Was mache ich falsch ?
Du lieferst keine Fehlerbeschreibung. Inwiefern kannst du den User nicht ändern?
-
Hi,
ich habe in der Klasse einen Benutzername, welche ich ohne
Probleme auslesen kann. Schreiben geht aber nicht.class User { private: // Siehe jede Instanz nur QString FullName; // User name QString ID; // Login ID QString UserGroup; // Permission Group QString Domain; // Login Domain public: User(); ~User() ; QString GetFullName( void ); void SetFullName( QString ); QString GetID( void ); void SetID( QString ); QString GetUserGroup( void ); void SetUserGroup( QString ); QString GetDomain( void ); void SetDomain( QString ); void ClearUserInfos( void ); };
Diese Funktion sollte die Benutzer löschen, welche in einer anderen Klasse definiert sind. (ich doch, das ich keine Kopie der Instanz bekomme).
void UserLogin::Button_Cancel() { Operator->ClearUserInfos(); }
Hier der Init der Klasse:
{ ui.setupUi(this); if( Usr != 0 ) Operator=Usr; if ( Operator->GetID().isEmpty() ) ui.InputUserID->clear(); else ui.InputUserID->setText( Operator->GetID() ); ui.InputUserID->setFocus(); ui.InputPassword->clear(); Password=""; connect(ui.InputUserID, SIGNAL(textChanged(QString)), this, SLOT(UserID_Changed(QString))); connect(ui.InputPassword, SIGNAL(textChanged(QString)), this, SLOT(UserPassword_Changed(QString))); connect(ui.buttonBox, SIGNAL(accepted()), this, SLOT(Button_Ok())); connect(ui.buttonBox, SIGNAL(rejected()), this, SLOT(Button_Cancel())); }
Gruss
-
Ich sehe zwar immernoch nicht, was du genau für ein Problem hast, aber wenn sich der Code kompilieren lässt, ist das in erster Linie mal sicher nicht const. Es kann aber natürlich sein, dass intern irgendetwas mit temporären Variablen gemacht wird, so dass beim lesen alles stimmt, aber wenn du etwas veränderst das keine Auswirkung hat, da es z.B gleich wieder überschrieben wird. (Fände ich recht unsinnig, eben wegen der Möglichkeit von const).
-
In diesem Sinne wäre es nach wie vor gut, wenn du sagst, was konkret nicht geht. Hast du es schon mit einem Debugger versucht?
Und wie sieht die
ClearUserInfos
-Methode aus?
-
Hi,
ich habe den Fehler gefunden.
Ich habe einen Dialog (QT) geöffnet.
Die Routine hat korrekt den Username gelöscht.
Die Standardroutine scheint aber die Klasse (den Dialog) noch im Speicher gehalten zu haben, daher wurde der Konstruktor nicht mehr durchlaufen. Bei nächsten öffnen stand dann noch der alte Inhalt im Fenster. Es wurde halt und unsichtbar gemacht, nicht zerstört.Muss jetzt nur für das korrekte Entladen des Dialogs sorgen, damit der Speicher sauber ist und der Konstruktor immer durchlaufen wird.
Gruss
P.S.: Danke für die Hilfe. Bin dadurch erst aufs Debuggen gekommen.
So klappt es wie es soll !
DialogUserLogin = new UserLogin(this, &ActualUser); DialogUserLogin->exec(); delete DialogUserLogin;