Seite 1 von 1

[gelöst] Programmabsturz durch LineEdit->text()

Verfasst: 4. Oktober 2006 13:22
von mephistho
Hi,

ich komm auch mal wieder nicht weiter und steh ziemlich aufm Schlauch.

In meiner Klasse erstelle ich mir ein QLineEdit "LEHostname"

Code: Alles auswählen

	// LineEdit zur Eingabe des anzupingenden Hosts
	QLineEdit *LEHostname = new QLineEdit(this);
	LEHostname->setGeometry(60, 520, 100, 25);
Zudem hat die Klasse nen Button "BStartPing" ... Name ist Programm

Code: Alles auswählen

	// Button zum Starten des Pings
	QPushButton *BStartPing = new QPushButton("Ping starten", this);
	BStartPing->setGeometry(165, 521, 70, 23);

Code: Alles auswählen

        // connect zum Starten des Pings bei Click auf BStartPing
	connect(BStartPing, SIGNAL(clicked()), this, SLOT(startPing()));

Code: Alles auswählen

void MyWidget::startPing()
{
	QString ping_cmd_str;
	ping_cmd_str.append("ping -t ");
	ping_cmd_str.append(LEHostname->text());
	ping_cmd_str.append(" >> bla.txt");
}
Solange ich nur ne Datei über den Button ausführen lasse o.ä. läufts, aber sobald ich irgendwie auf LEHostname->text() zugreifen will, stürzt er ab mit der folgenden allseits beliebten Fehlermeldung:
Die Anweisung in "0x0076ef56" verweist auf Speicher in "0x000000c8". Der Vorgang "read" konnte nicht auf dem Speicher durchgeführt werden.
[...]
Wär nett, wenn ihr mir helfen könntet, ich komm nich drauf :?

Danke und Gruß,
meph

Verfasst: 4. Oktober 2006 16:02
von caligano
Ich würde in der Headerdatei (.h) eine Deklaration à la

Code: Alles auswählen

private:

...

QLineEdit *LEHostname;

...
und dann in der .cpp Datei:

Code: Alles auswählen

 LEHostname = new QLineEdit(this); 

Verfasst: 4. Oktober 2006 16:10
von mephistho
Danke, daran lags.

Kannst du mir den Hintergrund erklären? Bin mir nicht sicher, ob ich das richtig durchschaut hab.

Verfasst: 4. Oktober 2006 16:18
von caligano
Da LEHostname erst im Klassen-Konstruktor deklariert wird, ist es auch nur in diesem Block (also in den geschweiften Klammern des Klassen-Konstruktors) gültig, in den anderen Funktionen NICHT!

Deklarierst du den Zeiger bereits in der Headerdatei, kann jede Funktion darauf zugreifen!

Verfasst: 4. Oktober 2006 18:51
von mephistho
Das macht Sinn, danke!

Wo isn der "gelöst" Button?

Verfasst: 4. Oktober 2006 19:01
von caligano
mephistho hat geschrieben:Wo isn der "gelöst" Button?
Klick bei deinem ersten Beitrag auf "Edit" und dann füge vor den Titel [gelöst] ein!