Seite 1 von 1

QDialog einen String übergeben

Verfasst: 24. September 2006 14:17
von bmeyer
Hallo zusammen !

Meine Frage ist einfacher Natur. Wie greife ich auf ein Objekt zu, was ich vor dem erzeugen eines Dialogs erstellt habe? Oder wie übergebe ich einem Dialog beim Starten einen String ?

Danke im voraus...

Verfasst: 24. September 2006 14:26
von DarkWotan
Etwa so?:

Code: Alles auswählen


class MyDialog : public QDialog
{
  public:
  MyDialog(QWidget* parent = 0, Qt::WFlags f = 0);
  
  private:
  QString m_string;

  public:
  void setString(const QString& s);
};

MyDialog::MyDialog(QWidget* parent, Qt::WFlags f)
  : QDialog(parent, f)
{
  //...
}

void MyDialog::setString(const QString& s)
{
  m_string = s;
}
MfG, Cedric

Verfasst: 24. September 2006 14:34
von bmeyer
Vielen Dank für die schnelle Antwort.
Das hatte ich so auch schon.
Ich hatte mir einen Dialog erstellt. Dann dialog.setString("test");
Innerhalb meiner Dialogimplementierung kann ich aber nicht auf den string zugreifen. Er ist leer.

Verfasst: 24. September 2006 14:56
von DarkWotan
Wie wär's mit ein bisschen Code, damit wir auch sehen können, was du fchlsa machst?

MfG, Cedric

Verfasst: 24. September 2006 15:32
von bmeyer
Im Programm folgender Aufruf:
------------------------------------
meinDialog dialog(this);
dialog.setString("test");
dialog.exec();


Datei meinDialog.h:
--------------------------
#include <QDialog>

class meinDialog : public QDialog
{
Q_OBJECT

public:
meinDialog(QWidget *parent = 0);
void setString( QString mystring ) { testString = mystring; }
const QString& getString() const { return testString; }

private:
QString testString;
};

Datei meinDialog.cpp:
-----------------------------------
#include <QtGui>
#include "meinDialog.h"

meinDialog::meinDialog(QWidget *parent)
: QDialog(parent)
{
QMessageBox::about(this, tr("Test Message"),
getString() );
...
}
#endif

Verfasst: 24. September 2006 16:47
von GwarDrazul
Das liegt daran, dass Du getString() im Konstruktor der Klasse aufrufst. setString() wird aber erst nach dem Erstellen des Objektes (= nach Konstruktoraufruf) aufgerufen. Darum ist getString() im Konstruktor noch der ursprüngliche wert.

Schreibe Dir einen zweiten/anderen Konstruktor, der so aussiet:

Code: Alles auswählen

meinDialog::meinDialog(const QString& string, QWidget *parent = 0)
{
    testString = string;
    // restliche Konstruktor Aufgaben...
}
und in der main.cpp dann:

Code: Alles auswählen

meinDialog dialog("test",this); 
dialog.exec();
Hoffe, das hilft.
Gruß

Verfasst: 24. September 2006 18:06
von DarkWotan
bmeyer hat geschrieben:

Code: Alles auswählen

void setString( QString mystring ) { testString = mystring; }
Außerdem solltest du, da du an dieser Stelle nicht beabsichtigst mystring zu ändern, diesen als konstante Referenz übergeben, um unnötige Kopiervorgänge zu vermeiden.

MfG, Cedric

Verfasst: 25. September 2006 09:04
von bmeyer
Das hat funktioniert :D

Vielen Dank :)