Slot and Signal

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
wschbr
Beiträge: 7
Registriert: 5. Dezember 2010 19:11

Slot and Signal

Beitrag 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!
dazedly
Beiträge: 197
Registriert: 3. Oktober 2010 15:38
Kontaktdaten:

Beitrag 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.
wschbr
Beiträge: 7
Registriert: 5. Dezember 2010 19:11

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ja, warum sollte es nicht möglich sein?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Denn auch wenn ich folgendermaßen mache, bekomme ich ein Fehler:
Und welchen?
wschbr
Beiträge: 7
Registriert: 5. Dezember 2010 19:11

Beitrag 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')
Zuletzt geändert von wschbr am 6. Dezember 2010 19:08, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Header für QPushButton nicht eingebunden.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
wschbr
Beiträge: 7
Registriert: 5. Dezember 2010 19:11

Beitrag von wschbr »

es funktioniert nun!
slotDgm2() war in der Header Datei unter public statt unter public slots deklariert.

Vielen Dank für die Hilfe!
Antworten