Seite 1 von 1
[gelöst] Rausfinden ob ein Signal angeschlossen ist
Verfasst: 7. Juli 2009 14:36
von BartSimpson
Hallo,
ich habe folgendes Problem:
bevor ich ein emit abfeuere muss ich wissen,
ob das signal irgenwie angeschlossen ist.
Hintergrund:
Bei dem Aufruf von Emit wird ein Objekt auf dem Heap angelegt.
Um die Aufräumaktion kümmert sich der Slot.
Nun kann es u.U. sein, das es kein Slot gibt.
Dann darf das Signal nicht abgefeuert werden.
Nur wie bekommt man raus, ob jemand an das Signal angedockt hat?
Verfasst: 7. Juli 2009 14:45
von BartSimpson
Diesmal war ich selber schneller *lol*
Verfasst: 7. Juli 2009 15:01
von franzf
Find ich aber nicht ideal und erst recht nicht schön

Mach es mit QSharedPointer! Ich nehme einfach mal an, es geht um Objekte, die per Signal/Slot ausgetauscht werden sollen. Falls nicht einfach genauer erzählen was du willst
objects.h
Code: Alles auswählen
#include <QObject>
#include <QSharedPointer>
#include <QDebug>
struct Data
{
int value;
Data(int val=0)
: value(val)
{
qDebug() << "Create" << value;
}
~Data()
{
qDebug() << "Destroy" << value;
}
};
class Sender : public QObject
{
Q_OBJECT
signals:
void send(QSharedPointer<Data>);
public:
void calc()
{
for( int i=0; i<10; i++ )
emit send( QSharedPointer<Data>(new Data(i*10)) );
}
};
class Reciever : public QObject
{
Q_OBJECT
public slots:
void recieve(QSharedPointer<Data> p)
{
qDebug() << "Recieved" << p->value;
}
};
main.cpp
Code: Alles auswählen
#include <QApplication>
#include "objects.h"
int main( int argc, char** argv )
{
QApplication app( argc, argv );
Sender sen;
Reciever rec;
QObject::connect(&sen, SIGNAL(send(QSharedPointer<Data>)), &rec, SLOT(recieve(QSharedPointer<Data>)));
sen.calc();
return app.exec();
}
Ausgabe:
Code: Alles auswählen
Create 0
Recieved 0
Destroy 0
Create 10
Recieved 10
Destroy 10
Create 20
Recieved 20
Destroy 20
Create 30
Recieved 30
Destroy 30
Create 40
Recieved 40
Destroy 40
Create 50
Recieved 50
Destroy 50
Create 60
Recieved 60
Destroy 60
Create 70
Recieved 70
Destroy 70
Create 80
Recieved 80
Destroy 80
Create 90
Recieved 90
Destroy 90
Verfasst: 14. Juli 2009 08:31
von BartSimpson
Das könnte sogar gehen, mal testen.
Verfasst: 14. Juli 2009 09:24
von BartSimpson
Leider geht es im Konkreten Fall nicht, da im Header das Objekt blind als
class XXX deklariert ist.
aber QSharedPointer die Hader Datei von XXX bräuchte. Was im diesem Fall leider nicht geht.
