klasse funktioniert nicht

Alles rund um die Programmierung mit Qt
Antworten
Irods
Beiträge: 53
Registriert: 24. Mai 2009 20:57
Kontaktdaten:

klasse funktioniert nicht

Beitrag von Irods »

Hi, ich hab folgende klasse geschrieben:

myinput.h:

Code: Alles auswählen

#ifndef MYINPUT_H
#define MYINPUT_H
#include <QtGui>
#include <QLabel>
#include <QApplication>
#include <QString>

class MyInput : public QWidget
{
	Q_OBJECT
	public:
		MyInput(QString*, QString*, QString*, QString*, QString*);
		void setvar();
	private:
		QVBoxLayout *layout;
		QPushButton *conbut;
		QLabel* infol;
		QLabel* userl;
		QLabel* pwl;
		QLabel* hostl;
		QLabel* dbl;
		QLabel* tablel;
		QLineEdit *usere, *pwe, *hoste, *dbe, *tablee;
		QString *zhost, *zdatenbank, *zusername, *zpasswort, *ztabelle;
};
#endif
myinput.cpp:

Code: Alles auswählen

#include <QApplication>
#include "myinput.h"

MyInput::MyInput( QString *host, QString *datenbank, QString *username, QString *passwort, QString *tabelle )
{


	zhost=host;
	zdatenbank=datenbank;
	zusername=username;
	zpasswort=passwort;
	ztabelle=tabelle;


	layout	= new QVBoxLayout;
	conbut	= new QPushButton("connect");

	infol	= new QLabel("Please enter your datas:");

	userl	= new QLabel("Username");
	pwl	= new QLabel("Userpasswort");
	hostl	= new QLabel("Hostaddress");
	dbl	= new QLabel("Database");
	tablel	= new QLabel("Table");

	usere	= new QLineEdit;
	pwe	= new QLineEdit;
	hoste	= new QLineEdit;
	dbe	= new QLineEdit;
	tablee	= new QLineEdit;

	layout->addWidget(infol);
	layout->addWidget(userl);
	layout->addWidget(usere);
	layout->addWidget(pwl);
	layout->addWidget(pwe);
	layout->addWidget(hostl);
	layout->addWidget(hoste);
	layout->addWidget(dbl);
	layout->addWidget(dbe);
	layout->addWidget(tablel);
	layout->addWidget(tablee);
	layout->addWidget(conbut);
	setLayout(layout);

	connect( conbut, SIGNAL(clicked()),	this, SLOT(setvar()) );
	connect( conbut, SIGNAL(clicked()),	this, SLOT(close()) );
}
void MyInput::setvar()
{
	*zhost		=hoste->text();
	*zdatenbank	=dbe->text();
	*zusername	=tablee->text();
	*zpasswort	=usere->text();
	*ztabelle	=pwe->text();
}
Sie soll dafür da sein Daten zu sammeln und in die Zeigerpararmeter des Konstruktors zu schreiben.

Das problem ist aber das genau dies nicht funktioniert.
Es gibt keine Fehlerausgabe, das Programm läst sich starten aber die Klasse lässt die Zeigerpararmeter unbearbeitet.

Bitte um Hilfe.

Gruss Irods.

ps schon ma thx
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

setvar ist auch kein SLOT.

// Außerdem find ich das sehr fraglich, das Design...
Du kannst (wahrscheinlich) nicht wissen, wer am Ende die Zeiger noch braucht, und kannst die deshalb auch nicht löschen. Wenn doch viel Spaß bei den Segfaults.

Ich würd da eher ein SIGNAL rausschicken, wenn sich was an den Daten getan hat. Dann geb ich MyInput ein paar Methoden, mit denen ich mir die QStrings holen kann, und setz die wieder in dem Kontext, wo du indirekt über die Zeiger gesetzt hast.
Oder ich pack die Daten in ein "struct ConnectionInfo" und geb das gleich dem SIGNAL mit, dann können die Daten sofort im SLOT ohne zusätzliche Methodenaufrufe verwendet werden. Ist aber Geschmackssache.

Nebenbei bringt dir das reine Setzen der Zeiger in setvar recht wenig, weil da NIEMAND was davon mitbekommt. Du wirst die Daten wohl wo anders wieder verwenden wollen. und diese Klasse kriegt die Änderung nicht mit, Anzeige (wie im QLabel) wird aktualisiert mit setText().
Zuletzt geändert von franzf am 19. Juni 2009 23:32, insgesamt 1-mal geändert.
Irods
Beiträge: 53
Registriert: 24. Mai 2009 20:57
Kontaktdaten:

Beitrag von Irods »

franzf hat geschrieben:setvar ist auch kein SLOT.
mm danke ich hab den jetzt mal auf public slots gesetzt

Code: Alles auswählen

.
.
.
	public:
		MyInput(QString*, QString*, QString*, QString*, QString*);
	public slots:
				void setvar();
	private:
		QVBoxLayout *layout;
		QPushButton *conbut;
		QLabel* infol;
		QLabel* userl;
		QLabel* pwl;
		QLabel* hostl;
		QLabel* dbl;
		QLabel* tablel;
		QLineEdit *usere, *pwe, *hoste, *dbe, *tablee;
		QString *zhost, *zdatenbank, *zusername, *zpasswort, *ztabelle;
.
.
.
aber irgendwie gibt es keine Veränderung schade aber danke
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Code: Alles auswählen

make clean
qmake
make
liegt nämlich am moc, gibts hier wöchentlich ;)
Irods
Beiträge: 53
Registriert: 24. Mai 2009 20:57
Kontaktdaten:

Beitrag von Irods »

franzf hat geschrieben:setvar ist auch kein SLOT.

// Außerdem find ich das sehr fraglich, das Design...
Du kannst (wahrscheinlich) nicht wissen, wer am Ende die Zeiger noch braucht, und kannst die deshalb auch nicht löschen. Wenn doch viel Spaß bei den Segfaults.

Ich würd da eher ein SIGNAL rausschicken, wenn sich was an den Daten getan hat. Dann geb ich MyInput ein paar Methoden, mit denen ich mir die QStrings holen kann, und setz die wieder in dem Kontext, wo du indirekt über die Zeiger gesetzt hast.
Oder ich pack die Daten in ein "struct ConnectionInfo" und geb das gleich dem SIGNAL mit, dann können die Daten sofort im SLOT ohne zusätzliche Methodenaufrufe verwendet werden. Ist aber Geschmackssache.

Nebenbei bringt dir das reine Setzen der Zeiger in setvar recht wenig, weil da NIEMAND was davon mitbekommt. Du wirst die Daten wohl wo anders wieder verwenden wollen. und diese Klasse kriegt die Änderung nicht mit, Anzeige (wie im QLabel) wird aktualisiert mit setText().
Hi ich hab leider nicht mehr ganz verstanden was du wolltest xD sry prog noch nicht so lange qt aber wenn ich dich richtig verstanden habe liegt mein Problem darin das meine Zeiger die die Parameter sind gar nicht in meiner Funktion verändert werden oder?
Wenn ich richtig liege mit dieser Vermutung: wie kann ich das beheben?

thx
Irods
Beiträge: 53
Registriert: 24. Mai 2009 20:57
Kontaktdaten:

Beitrag von Irods »

franzf hat geschrieben:

Code: Alles auswählen

make clean
qmake
make
liegt nämlich am moc, gibts hier wöchentlich ;)
oh probiere ich sofort
Irods
Beiträge: 53
Registriert: 24. Mai 2009 20:57
Kontaktdaten:

Beitrag von Irods »

Irods hat geschrieben:
franzf hat geschrieben:

Code: Alles auswählen

make clean
qmake
make
liegt nämlich am moc, gibts hier wöchentlich ;)
oh probiere ich sofort
hat irgendwie doch nix gebracht schade :(
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Dann zeig mehr Code, denn aus der Aussage kann man schlecht den Fehler sehen.
Antworten