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?
[gelöst] Rausfinden ob ein Signal angeschlossen ist
-
BartSimpson
- Beiträge: 1379
- Registriert: 6. November 2004 12:03
- Kontaktdaten:
[gelöst] Rausfinden ob ein Signal angeschlossen ist
Zuletzt geändert von BartSimpson am 7. Juli 2009 14:45, insgesamt 2-mal geändert.
-
BartSimpson
- Beiträge: 1379
- Registriert: 6. November 2004 12:03
- Kontaktdaten:
Diesmal war ich selber schneller *lol*
Code: Alles auswählen
if (receivers(SIGNAL(XXXXX)) > 0)
emit XXXXX(YYYYY);
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
main.cpp
Ausgabe:
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;
}
};
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();
}
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-
BartSimpson
- Beiträge: 1379
- Registriert: 6. November 2004 12:03
- Kontaktdaten:
-
BartSimpson
- Beiträge: 1379
- Registriert: 6. November 2004 12:03
- Kontaktdaten: