[Geloest] QStringList per Referenz an Class uebergeben

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
gboelter
Beiträge: 80
Registriert: 5. Dezember 2007 14:52
Wohnort: Davao City, Philippines

[Geloest] QStringList per Referenz an Class uebergeben

Beitrag von gboelter »

Hallo,

ich scheitere gerade an dem Versuch eine QStringList aus der main.cpp per Referenz an den Construktor einer Klasse zu uebergeben, wobei das Problem nicht die Uebergabe selbst ist, die klappt schon, sondern die Weiterverarbeitung meiner Liste an eine Memberfunktion.

Hier zunaechst mal die main.cpp

Code: Alles auswählen

int main ( int argc, char* argv[] )
{
    QApplication app ( argc, argv );

    QStringList stringList;

    userAnmeldung userDialog ( stringList );

    int ret = userDialog.exec();

    if ( ret != QDialog::Accepted )
        return 1;

    QApplication::exit();

    qDebug() << stringList; //   ("Willi", "Winzig")

    MainWindow myMainWindow ( stringList );
    myMainWindow.show();

    return app.exec();
}
Und in der userAnmeldung.cpp dann:

Code: Alles auswählen

userAnmeldung::userAnmeldung( QStringList &stringList .... )
        : myStringList( stringList )
{
    setupUi( this );

    QStringList &myList = stringList;
    myList << "Willi" << "Winzig";

    // more code
}
Bis dahin scheint es auch zu klappen alles, denn nach Rueckkehr aus userAnmeldung enthaelt die Liste die richtigen Werte.

Mein Problem ist nun, dass "stringList" bis dahin ja nur im Construktor bekannt und entsprechend geaendert werden kann. Ich moechte den Inhalt von stringList aber auch in einer Memberfunktion bearbeiten koennen. Normalerweise wuerde ich dann einfach die entsprechende Variable an die Funktion uebergeben. Hier wird meine Memberfunktion aber per

Code: Alles auswählen

connect( pushButtonOk, SIGNAL ( pressed() ), this, SLOT ( accept() ));
aufgerufen.

Wie ereiche ich es nun, dass auch meine Memberfunktion stringList kennt? Muss ich mir da irgendwas mit QSignalMapper basteln oder gibt's da eine einfachere Moeglichkeit, die ich im Moment nur vor lauter Baeumen uebersehe?

Wohlbemerkt, und eben das ist mein Problem, auch an die Memberfunktion soll stringList per Referenz uebergeben werden, damit die veraenderte Liste auch wieder in der main.cpp zur Verfuegung steht.

Danke im voraus.
Zuletzt geändert von gboelter am 27. Oktober 2008 08:48, insgesamt 1-mal geändert.
Guenther
Davao City, Philippines, Planet Earth, 28°C

Qt 4.8.1 for Linux/X11 - Open Source Edition for Application Development
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Wie wäre es wenn Du die Stringlist als Member der Klasse speicherst?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

Code: Alles auswählen

Wie ereiche ich es nun, dass auch meine Memberfunktion stringList kennt? 
Dann deklariere halt deine Membervariabel "myStringList" als Referenz:

Code: Alles auswählen

class userAnmeldung  {
....
  private:
    QStringList &myStringList;
...
};
der Rest hast du ja schon (Initialisierung im Konstruktor).

Aber nebenbei: das ist keine schöne Lösung die du da hast. Ich würde doch einfach nach dem Anmelden das Resultat holen:

Code: Alles auswählen

if ( ret != QDialog::Accepted )
        return 1; 
QStringList result = userAnmeldung.result();  // returns myStringList ....
hth,
solariX


PS.

Code: Alles auswählen

userAnmeldung userDialog ( stringList ); 
das ist extrem schlechter Stil... Frag mal einen Entwickler einer anderen Programmiersprache (z.B. VB.NET), welches die Klasse ist und welches die Variabel...
Besser ist:

Code: Alles auswählen

UserAnmeldung userDialog ( stringList ); 
dann:

Code: Alles auswählen

QStringList stringList; 
auch schlechter Stil, weil nicht klar ist, was darin gespeichert wird. besser:

Code: Alles auswählen

QStringList userNameAndPassword;
oder

QStringList loginProfile; // name, wohnort, keine Ahnung was noch...
und das falsche Forum ist es auch noch (C++ Grundlagen+)
gboelter
Beiträge: 80
Registriert: 5. Dezember 2007 14:52
Wohnort: Davao City, Philippines

Beitrag von gboelter »

Christian81 hat geschrieben:Wie wäre es wenn Du die Stringlist als Member der Klasse speicherst?
Danke Christian,

genau das habe ich uebersehn .... :(

Und jetzt klappt's wunderbar. :D
Guenther
Davao City, Philippines, Planet Earth, 28°C

Qt 4.8.1 for Linux/X11 - Open Source Edition for Application Development
gboelter
Beiträge: 80
Registriert: 5. Dezember 2007 14:52
Wohnort: Davao City, Philippines

Beitrag von gboelter »

Hallo solarix,

danke fuer Deine konstruktive Kritik an meinem Code, ich werde mich bessern.

Normalerweise verwende ich auch eher Bezeichener wie

Code: Alles auswählen

    void lineEditKundenMatchcode_textChanged(QString);
    void showContextMenuForWidget(const QPoint &pos);
aber im Beispiel hatte ich wirklich reichlich geschlampt. Ich weiss aber auch, dass ich noch sehr viel lernen muss und bin daher fuer konstruktive Kritik immer dankbar.
Guenther
Davao City, Philippines, Planet Earth, 28°C

Qt 4.8.1 for Linux/X11 - Open Source Edition for Application Development
Antworten