Seite 1 von 1

Slot funktioniert nicht. Qt 4.1.4

Verfasst: 21. September 2006 14:10
von mephistho
Hallo,

teert und federt mich meinetwegen für diesen Thread, aber ich komm nich mehr weiter.

Ich hab mich im Forum schon umgeschaut und u.a. diesen Thread gelesen.

Zudem hab ich natürlich Bekannte konsultiert, die aber auch keine Lösung fanden.

Ich hab mir einen Slot erstellt, um den Inhalt eines QLineEdit auf Knopfdruck auf einem QLabel ausgeben zu lassen.

Er kompiliert alles, aber der Knopfdruck hat keinen Effekt.

Vermutlich ist es irgendein billiger Fehler, an dem ich nur dauernd vorbeiguck.

Es folgen - hoffentlich ausreichende - Codeschnipsel.

Code: Alles auswählen

class MyWidget: public QWidget
{	
	QLabel *status;
		
public:
	MyWidget(QWidget *parent = 0);
	QString hostname;
	QLabel *LTestLabel;
	QLineEdit *LEHostname;
	QLabel *LHostname;
	
private slots:
	void setHostname();

};

Code: Alles auswählen

// LineEdit zur Eingabe des anzupingenden Hosts
	QLineEdit *LEHostname = new QLineEdit(this);
	LEHostname->setGeometry(60, 520, 100, 25);

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

// Testlabel
	LTestLabel = new QLabel(this);
	LTestLabel->setGeometry(305, 520, 70, 25);

Code: Alles auswählen

// connect zur Ausgabe des Hostnamens auf TestLabel
	QObject::connect(LEHostname, SIGNAL(clicked()), this, SLOT(setHostname()));

Code: Alles auswählen

void MyWidget::setHostname()
{
	this->LTestLabel->setText("fhgsfg");
}
Habt ihr ne Idee :?:

Danke im Vorraus.

Gruß,
meph

Verfasst: 21. September 2006 14:57
von FlorianBecker
Der Macro O_OBJECT wurde nicht mitgeteilt, darauf hin auch keine moc Datei generiert und kompiliert.

Verfasst: 21. September 2006 15:29
von Flachkoepper
erstens das, und zweitens haben QLineEdits kein clicked()-Signal, soweit ich weiß.

Flachkoepper

Verfasst: 22. September 2006 10:20
von mephistho
Danke. Vollkommen richtig.

Wir haben zu Testzwecken ein wenig rumgebastelt.

Jetzt sieht es so aus:

Code: Alles auswählen

class MyWidget: public QWidget
{	
	Q_OBJECT
			
public:
	MyWidget(QWidget *parent = 0);
	QString hostname;
	QLabel *LTestLabel;
	QLineEdit *LEHostname;
	QLabel *LHostname;
	QLabel *status;
	
	int start_ping();

signals:
	void matextschreiben(QString);
	
private slots:
	void setHostname();

};

Code: Alles auswählen

// connect zur Ausgabe des Hostnamens auf TestLabel
	connect(this, SIGNAL(matexteschreiben(QString)), LTestLabel, SLOT(setText(QString)));
	connect(BStartPing, SIGNAL(clicked()), this, SLOT(setHostname()));

Code: Alles auswählen

void MyWidget::setHostname()
{
	emit matextschreiben(LEHostname->text());
}
Immerhin hat der Button-Klick jetzt einen Effekt:

Das Programm stürzt ab ;)

Speicherfehler:
Die Anweisung in "0x..." verweist auf Speicher in "0x...". Der Vorgang read konnte nicht auf dem Speicher durchgeführt werden.

Weitere Ideen?


meph

Verfasst: 22. September 2006 10:25
von Christian81
mephistho hat geschrieben: Weitere Ideen?
Man nehme einen Debugger und schaue nach... :)

Verfasst: 27. September 2006 09:56
von GwarDrazul
Bin ich nicht in der Lage, die Definition für "BStartPing" zu finden oder stehts nicht drin?

Gruß