Aus einem Objekt heraus private Variablen eines anderen Objekts ändern



  • Hallo zusammen ...

    Ich habe bis jetzt quasi noch gar nicht mit objektorientiert programmiert. Da ich mich jetzt allerdings an die Programmierung einer grafischen Benutzeroberfläche machen muss, komme ich wohl nicht drum rum. ich habe mich schon belesen, aber an einem Punkt komme ich nicht weiter...

    Ich habe ein Objekt, welches einem Fenster (Form?!) entspricht. Dieses beinhaltet verschiedene Variablen. Durch das Anklicken eines Buttons wird ein neues Fenster (Form) geöffnet. Dieses entspricht einem neuen Objekt.

    Jetzt würde ich gern aus diesem zweiten Fenster (private) Variablen aus dem ersten Fenster Verändern. Sprich mit einem Objekt die Variablen eines anderen ändern.

    Wenn ich das richtig verstehe ist das Problem bei der ganzen Geschichte, dass das zweite Objekt das erste ja "nicht kennt". Wie kann ich dieses Problem lösen?

    Vielen Danks chonmal für euere Hilfe 🙂



  • du könntest dem neuen Fenster das alte per Pointer quasi als "Vater" (oder Mutter) übergeben.

    Zugriff auf private Attribute stellst du entweder über entsprechende öffentliche Methoden (gute Lösung) oder über friend her (weniger gute Lösung)

    Ich empfehle dir aber entsprechende Lektüre zu dem Thema. Das ganze ist nicht trivial

    Welches GUI-Framework verwendest du? Dann kann man dir vll auch konkrete Tipps geben



  • Vielen Dank erstmal für deine Antwort.

    Ich Versuche mich zZ an QT4 in Verbindung mit dem VS 2008 Express.
    Ich hab das mit dem Pointer übergeben mal so versucht, wie du es gesagt hast. Leider bekomme ich dann immer einen Absturz ("Unbehandelte Ausnahme bei 0x10...") sobald ich das zweite Fenster öffnen möchte.

    Vielleicht hab ich deinen Rat aber auch nur falsch umgesetzt ?!
    So hab ichs gemacht:

    Erzeugen des neuen Objekts und Übergabe des Zeigers auf das aktuelle Fenster mit "this":

    void myQtApp::start_new()
    {
        myNewQtApp *Ndialog = new myNewQtApp(this);
        Ndialog->show();	
    }
    

    Der Konstruktor für die Klasse des neuen Fensters (myNewQtApp) sieht dann wie folgt aus:

    myNewQtApp::myNewQtApp(myQtApp *MWindow,QWidget *parent)
    {
    	setupUi(this); // this sets up GUI
    	connect( pushButton_Box, SIGNAL( clicked() ), this, SLOT( InfoBox() ) ); 
    
    	text=MWindow->GetText();
    }
    

    Wobei "GetText()" folgendermaßen definiert ist:

    QString myQtApp::GetText()
    {
    	return textEdit->toPlainText();
    }
    

    Ich hoffe einfach mal, dass ihr da durchseht, auch ohne euch mit Qt auszukennen. Ich gehe doch stark davon aus, dass das Problem auch leicht zu verallgemeinern ist...



  • Ah Qt... schau dir einfach mal die unzähligen Beispiele im assistant an, die dürften weiterhelfen

    Jedes von QObject abgeleitete Objekt (also alle Fenster, Steuerelemente und auch diverse andere Klassen) nehmen im Konstruktor als ersten Parameter einen Zeiger auf den parent

    ein typischer Konstruktor einer von QWidget abgeleiteten Klasse sieht so aus:

    CustomWidget::CustomWidget(QWidget* parent)
    : QWidget(parent)
    {
      //...
    }
    

    und erstellt wird es so:

    void YourMainWindow::showWidget()
    {
      CustomWidget* w = new CustomWidget(this);
    
      w->show();
    }
    

    wichtig ist, dass der parent an die Basisklasse weitergeleitet wird. Dessen Destruktor übernimmt dann das lästige aufräumen


Anmelden zum Antworten