QDialog einen String übergeben

Alles rund um die Programmierung mit Qt
Antworten
bmeyer
Beiträge: 5
Registriert: 24. September 2006 14:12

QDialog einen String übergeben

Beitrag 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...
DarkWotan
Beiträge: 65
Registriert: 18. Mai 2006 10:03

Beitrag 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
bmeyer
Beiträge: 5
Registriert: 24. September 2006 14:12

Beitrag 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.
DarkWotan
Beiträge: 65
Registriert: 18. Mai 2006 10:03

Beitrag von DarkWotan »

Wie wär's mit ein bisschen Code, damit wir auch sehen können, was du fchlsa machst?

MfG, Cedric
bmeyer
Beiträge: 5
Registriert: 24. September 2006 14:12

Beitrag 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
GwarDrazul
Beiträge: 23
Registriert: 5. Juni 2006 18:56

Beitrag 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ß
DarkWotan
Beiträge: 65
Registriert: 18. Mai 2006 10:03

Beitrag 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
bmeyer
Beiträge: 5
Registriert: 24. September 2006 14:12

Beitrag von bmeyer »

Das hat funktioniert :D

Vielen Dank :)
Antworten