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
connect mit anderen klassen
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
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
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.
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.
Es muss heissen:
Natürlich muss die Klasse, der Artikel angehört, diesen Slot auch besitzen.
Code: Alles auswählen
connect (artikelListe, SIGNAL(currentItemChanged( QTreeWidgetItem*, QTreeWidgetItem* )), Artikel, SLOT(EinenArtikelAnzeigen( QTreeWidgetItem*, QTreeWidgetItem* )));