Seite 1 von 1
Slot and Signal
Verfasst: 5. Dezember 2010 20:36
von wschbr
Hallo,
ich bin blutiger C++/Qt Anfänger und versuche heute schon sehr lange folgendes Problem zu lösen:
class1{
connect(pbSettingOpen, SIGNAL(clicked()), SLOT(slotLoad()));
}
ich würd gerne bei Klick anstelle der Funktion slotLoad eine Funktion aus einer anderen Klasse aufrufen.
Mein Ansatz dazu war:
connect(pbSettingOpen, SIGNAL(clicked()), SLOT(class2::slotLoadNew()));
Allerdings bekomme ich zur Laufzeit immer folgenden Fehler:
Object::connect: No such slot class1::class2::slotLoad()
Was mache ich falsch?
Vielen Dank für eure Hilfe!
Verfasst: 5. Dezember 2010 21:22
von dazedly
Eigentlich machst du alles falsch. Solltest erstmal die Doku zu connect lesen.
connect(objekt, SIGNAL(ichBinEinSignalVonObjekt()), object, SLOT(ichBinEinSlotVonObject()));
du kannst in einer Klasse statt objekt auch "this" benutzen.
http://doc.trolltech.com/4.7/qobject.html#connect-2
Außerdem wirst du so eh nicht weiter kommen, da du für das connect auch die Instanz von deinem Objekt brauchst. Du kannst nicht einfach auf alle objekte von diesem Typ connecten.
Verfasst: 5. Dezember 2010 22:55
von wschbr
Erstmal danke

Ist es denn generell überhaupt möglich, als receiver ein Objekt einer anderen Klasse zu verwenden?
Denn auch wenn ich folgendermaßen mache, bekomme ich ein Fehler:
class1::class1(...)
{
...
connect(pbSettingOpen, SIGNAL(clicked()), ObjClass2, SLOT(slotLoadNew()));
}
ObjClass2 ist dabei ein Objekt einer anderen Klasse
Verfasst: 6. Dezember 2010 06:30
von Christian81
Ja, warum sollte es nicht möglich sein?
Verfasst: 6. Dezember 2010 09:03
von upsala
Denn auch wenn ich folgendermaßen mache, bekomme ich ein Fehler:
Und welchen?
Verfasst: 6. Dezember 2010 18:58
von wschbr
Code: Alles auswählen
EditSettings::EditSettings(QWidget *parent, const char *name) : QDialog(parent, name, true),
EditSettingsBase()
{
setupUi(this);
setIcon(Pixmap("EditSettings.png"));
updateWidgets();
flight *test = new flight;
connect(pbSettingDgmOpen, SIGNAL(clicked()),test, SLOT(slotDgm2()));
}
Code: Alles auswählen
void flight::slotDgm2()
{
QString dgmfilename3 = QFileDialog::getOpenFileName(0,
QString::tr("Open File"),
"/home",
QString::tr("DGM Files (*.dgm);;DGM Files (*.txt)"));
}
[/code]
Ich erhalte zur Laufzeit bei einem Klick auf den Button den folgenden Fehler:
Object::connect: No such slot QObject::flight::slotDgm2() in src/editsettings.cpp:32
Object::connect: (sender name: 'pbSettingDgmOpen')
Verfasst: 6. Dezember 2010 19:07
von Christian81
Header für QPushButton nicht eingebunden.
Verfasst: 6. Dezember 2010 19:25
von wschbr
es funktioniert nun!
slotDgm2() war in der Header Datei unter public statt unter public slots deklariert.
Vielen Dank für die Hilfe!