Problem mit Benutzung von Variable außerhalb einer Klasse

Alles rund um die Programmierung mit Qt
Antworten
theskum
Beiträge: 7
Registriert: 30. Januar 2007 11:50

Problem mit Benutzung von Variable außerhalb einer Klasse

Beitrag von theskum »

Hey Leute!

Irgendwie stehe ich gerade voll auf dem Schlauch.
Vielleicht hat die Sache auch nicht viel mit QT direkt zu tun. Ich bitte um Verzeihung...!

Bitte entschuldigt die schlampige Variablen und Klassenbezeichnung. Ich wollte nur bissi mit QT rumspielen.

Ich habe eine Klasse test_gui in einer Datei test.h definiert:

Code: Alles auswählen

#ifndef TEST_H
#define TEST_H

#include "ui_test.h"

#include <QApplication>

class test_gui : public QMainWindow, public Ui_MainWindow 
{
   Q_OBJECT

   public:
      test_gui (QMainWindow *parent = 0);
      ~test_gui ();
      QString getVar();  // public, damit andere Klassen zugreifen können
   private slots:
    // gekürzt
   private:
      QString lala;         // diese Variable wird von getVar zurückgegeben

};

#endif // TEST_H 

In der Datei test.cpp:

Code: Alles auswählen


void test_gui::getText()
{

lala = lineEdit->text();
test_seite1 *mhhh = new test_seite1;
mhhh->neue_Seite();

delete mhhh;
}

QString test_gui::getVar()
{
return lala;

// Folgendes funktioniert...:
// lala = "hallo";
// return lala;

}
neue_Seite() ruft ein neues (Dialog)Fenster auf.

Auf dieser neuen Seite ist dann ein lineEdit, das den Text aus dem ersten Fenster anzeigen soll.

Das wollte ich mit

Code: Alles auswählen


//include von test.h und anderem

test_seite1::test_seite1(QDialog *parent) : QDialog(parent)
{
   setupUi(this);
   test_gui *var1 = new test_gui;
   lineEdit2->setText(var1->getVar());
}

machen.

Leider funktioniert das nicht.

Wo habe ich da einen Denkfehler?

Und bitte jetzt kein "lern C++". Ich bin gerade dabei ;)!

Bin mir eigentlich sicher mich an die Regeln gehalten zu haben. Attribute immer private und get und set Methoden public und mit Hilfe dieser dann von anderen Klassen auf die private Variable zugreifen.


Danke für jede Hilfe.

Tschau
Sandro
Tarek
Beiträge: 46
Registriert: 3. Oktober 2005 14:29
Kontaktdaten:

Beitrag von Tarek »

Das Problem ist, dass dein Test_Seite1 Dialog ein neues, unsichtbares gui_test Fenster anlegt und dann dort statt in dem alten das logischer Weiße lehre Label ausließt.

Die Lösung wäre:

Code: Alles auswählen

seite1::test_seite1(QDialog *parent) : QDialog(parent)
{
   setupUi(this);
   lineEdit2->setText(((test_gui*)parent)->getVar());
} 
theskum
Beiträge: 7
Registriert: 30. Januar 2007 11:50

Beitrag von theskum »

Mhh...wenn ich das so mache, rauscht mir, beim Klick auf den Button zum Anzeigen des neuen Fensters, mein Programm mit einem Speicherzugriffsfehler ab :(!

Das muss doch irgendwie schöner gehen, oder?!

Danke für deine Hilfe!

Tschau
Sandro
Tarek
Beiträge: 46
Registriert: 3. Oktober 2005 14:29
Kontaktdaten:

Beitrag von Tarek »

Musst natürlich bei der Erstellung das Hauptfenster auch als Parent übergeben... hatte ich übersehen.

Wenn du also

Code: Alles auswählen

test_seite1 *mhhh = new test_seite1; 
noch in

Code: Alles auswählen

test_seite1 *mhhh = new test_seite1(this); 
umwandelst sollte es funktionieren.
Das muss doch irgendwie schöner gehen, oder?!
Nein, mein Code ist der Schönste :mrgreen:
Antworten