Seite 1 von 1

connect mit anderen klassen

Verfasst: 2. August 2006 12:38
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

Verfasst: 2. August 2006 13:48
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

Verfasst: 2. August 2006 14:14
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.

Verfasst: 2. August 2006 14:59
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.

Verfasst: 2. August 2006 15:25
von tseucs
Danke, jetzt gehts :-) Bin halt doof