empfang aller (auch vorher) gesendeten signale bei connect?
-
-=Freaky=-
- Beiträge: 503
- Registriert: 29. Dezember 2006 22:54
- Wohnort: HL
empfang aller (auch vorher) gesendeten signale bei connect?
hi,
ich wundere mich gerade, wie sich das mit dem senden und empfangen von signalen verhaelt.
wenn ein objekt signale (dasselbe signal mehrmals) versendet (emit ...) oder zumindest versenden sollte, aber kein slot mit diesem signal verbunden ist, und _danach_ ein slot mit diesem signal verbunden wird, wird dieser slot dann so oft ausgefuehrt, wie vorher signale versendet wurden, sprich werden alle vorher versendeten signale nachtraeglich empfangen?
// edit: gekuerzt
mfg,
julian
ich wundere mich gerade, wie sich das mit dem senden und empfangen von signalen verhaelt.
wenn ein objekt signale (dasselbe signal mehrmals) versendet (emit ...) oder zumindest versenden sollte, aber kein slot mit diesem signal verbunden ist, und _danach_ ein slot mit diesem signal verbunden wird, wird dieser slot dann so oft ausgefuehrt, wie vorher signale versendet wurden, sprich werden alle vorher versendeten signale nachtraeglich empfangen?
// edit: gekuerzt
mfg,
julian
Zuletzt geändert von -=Freaky=- am 22. Mai 2008 15:55, insgesamt 1-mal geändert.
-
PeterLustig
- Beiträge: 386
- Registriert: 21. November 2007 20:07
-
-=Freaky=-
- Beiträge: 503
- Registriert: 29. Dezember 2006 22:54
- Wohnort: HL
danke, hab ich auch eben gelesen.
und sorry, der thread sollte gar nicht offen sein, ist, wie man sieht, auch vollkommen unfertig. das war ein versehen, habs jetzt erst bemerkt
mfg,
julian
und sorry, der thread sollte gar nicht offen sein, ist, wie man sieht, auch vollkommen unfertig. das war ein versehen, habs jetzt erst bemerkt
mfg,
julian
Zuletzt geändert von -=Freaky=- am 22. Mai 2008 16:10, insgesamt 1-mal geändert.
-
-=Freaky=-
- Beiträge: 503
- Registriert: 29. Dezember 2006 22:54
- Wohnort: HL
ok nochmal zu dem thema:
ich habe jetzt eine QList< Element > m_elements und eine methode
nun fuehre ich zum testen das hier aus:
als ausgabe bekomme ich:
und das verstehe ich nicht, dass da auf einmal 5 signale sein sollen, obwohl mit den elementen absolut nichts angestellt wird....
kann sich das jemand erklaeren? muss ich an anderer stelle im code suchen?
mfg,
julian
ich habe jetzt eine QList< Element > m_elements und eine methode
Code: Alles auswählen
void myClass::add()
{
m_elements.push_back( Element() );
qSort( m_elements );
QList< Element >::iterator it = m_elements.end() - 1;
Element &elemRef = *it;
connect( &elemRef, SIGNAL( changed() ), this, SLOT( elemChanged() ) );
}
void myClass::elemChanged()
{
emit elementDataChanged();
}Code: Alles auswählen
myClass myclass;
myclass.add();
// ein paar methoden testen, alles klappt wunderbar, es sind nun 3 elemente in m_elements
QSignalSpy spyChange( &myclass, SIGNAL( elementDataChanged() ) );
QVERIFY( spyChange.count() == 0 );
myclass.add();
qDebug() << "spyChange.count() after add():" << spyChange.count();
myclass[ 0 ].setSomeValue( 1234 ); // erst hier sollte ein signal gesendet werden, und das wird es auch
qDebug() << "spyChange.count() after changing element:" << spyChange.count();Code: Alles auswählen
********* Start testing of MyClassTest *********
Config: Using QTest library 4.3.4, Qt 4.3.4
PASS : MyClassTest::initTestCase()
PASS : MyClassTest::testElement()
QDEBUG : MyClassTest::testmyClass() spyChange.count() after add(): 5
QDEBUG : MyClassTest::testmyClass() spyChange.count() after changing element: 6
PASS : MyClassTest::testmyClass()
PASS : MyClassTest::cleanupTestCase()
Totals: 4 passed, 0 failed, 0 skipped // klar, ohne QVERIFY() am ende ...
********* Finished testing of MyClassTest *********kann sich das jemand erklaeren? muss ich an anderer stelle im code suchen?
mfg,
julian
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
-
-=Freaky=-
- Beiträge: 503
- Registriert: 29. Dezember 2006 22:54
- Wohnort: HL
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Es kann nicht gehen - es wird ein Element kopiert, also auch der copy-ctor von QObject aufgerufen. Und dieser ist (aus gutem Grund) private.
Wenn es geht dann wohl nur weil der Compiler das Kopieren des Objektes wegoptimiert hat. Aber allgemein geht es nicht. Ich glaube auch das deswegen eine 5 dort auftaucht.
Wenn es geht dann wohl nur weil der Compiler das Kopieren des Objektes wegoptimiert hat. Aber allgemein geht es nicht. Ich glaube auch das deswegen eine 5 dort auftaucht.
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
-
-=Freaky=-
- Beiträge: 503
- Registriert: 29. Dezember 2006 22:54
- Wohnort: HL
achso - mist.
die zeile "m_element.push_back( ... )" sieht anders aus eigentlich. sorry, hatte ich im affekt nicht dran gedacht.
so ist es im originalcode ... tut mir leid
// edit: ich hab es gerade mal probiert, m_elements.push_back( Element() ) kompiliert genauso ...
mfg,
julian
die zeile "m_element.push_back( ... )" sieht anders aus eigentlich. sorry, hatte ich im affekt nicht dran gedacht.
Code: Alles auswählen
void myClass::add( const double &a, const double &b )
{
Element elem( a, b );
m_elements.push_back( elem );
qSort( m_elements );
QList< Element >::iterator it = m_elements.end() - 1;
Element &elemRef = *it;
connect( &elemRef, SIGNAL( changed() ), this, SLOT( elemChanged() ) );
}// edit: ich hab es gerade mal probiert, m_elements.push_back( Element() ) kompiliert genauso ...
mfg,
julian
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
-
-=Freaky=-
- Beiträge: 503
- Registriert: 29. Dezember 2006 22:54
- Wohnort: HL