connect mit anderen klassen

Alles rund um die Programmierung mit Qt
Antworten
tseucs
Beiträge: 33
Registriert: 2. August 2006 12:30

connect mit anderen klassen

Beitrag von tseucs »

Hallo,

ich möchte einen connect mit einer anderen Klasse benutzen, so ungefähr:
class class1: public QObject {
Q_OBJECT
public slot:
void test();
};

class class2: public QMainWindow {
...
private:
class1: testklasse;
};

class2:class2 (...) {
connect (button, SIGNAL(clicked()), this, SLOT(testklasse()));
}

Das Problem ist jetzt: Wenn der connect innerhalb der klasse (class1) durchgeführt wird, funktioniert es wunderbar. Bei der anderen Klasse (class2) kommt aber die Meldung "No such slot ..."

Weiss jemand, was ich falsch mache?

Gruß
Torsten
MichaelS
Beiträge: 240
Registriert: 27. Dezember 2005 12:49

Beitrag von MichaelS »

Moin,

das kann auch nicht funktionieren,

denn

a) gibt es in keiner der Klassen einen Slot testklasse() sondern nur einen Slot test()
b) ist das "this" im connect falsch, denn hiermit ist class2 gemeint. Der Slot ist aber in class1 definiert.

Der Compiler hat daher völlig recht, wenn er sich über den fehlenden Slot beklagt. Folgender Aufruf sollte besser klappen:

connect (button, SIGNAL(clicked()), testklasse, SLOT(test()));

Gruß Michael
tseucs
Beiträge: 33
Registriert: 2. August 2006 12:30

Beitrag von tseucs »

Ok, also hier mal die Original-Klassen. Hatte das nur als Beispiel geschrieben und mich dabei wohl vertippt:

class rtsArtikel : public QWidget {
Q_OBJECT
public:
rtsArtikel(rechnungts3 *parent, ManageData *fDaten);
...
public slots:
void ArtikelNeu(QTreeWidget *artikelListe);
...
};

class rechnungts3: public QMainWindow, public Ui::RechnungTS3Form {
Q_OBJECT
public:
rechnungts3(QWidget *parent = 0, const char *name = 0);
...
private:
...
rtsArtikel *Artikel;

...
};

rechnungts3::rechnungts3(QWidget *parent, const char *name)
{
...
Artikel = new rtsArtikel(this, daten);
...
connect (artikelListe, SIGNAL(currentItemChanged( QTreeWidgetItem*, QTreeWidgetItem* )), Artikel, SLOT(Artikel->EinenArtikelAnzeigen( QTreeWidgetItem*, QTreeWidgetItem* )));
...


Da es nur an dieser Stelle die Probleme gibt, habe ich den Rest mal weg gelassen. Ich habe auch schon versucht, Artikel gegen this auszutauschen als 3. Parameter, Effekt der gleiche. Übrigens kommt der Fehler zur Laufzeit, nicht beim compilieren.
OscarWild
Beiträge: 54
Registriert: 19. Juni 2006 19:59

Beitrag von OscarWild »

Es muss heissen:

Code: Alles auswählen

connect (artikelListe, SIGNAL(currentItemChanged( QTreeWidgetItem*, QTreeWidgetItem* )), Artikel, SLOT(EinenArtikelAnzeigen( QTreeWidgetItem*, QTreeWidgetItem* )));
Natürlich muss die Klasse, der Artikel angehört, diesen Slot auch besitzen.
tseucs
Beiträge: 33
Registriert: 2. August 2006 12:30

Beitrag von tseucs »

Danke, jetzt gehts :-) Bin halt doof
Antworten