On Monday 08 December 2003 17:10, Bernhard Walle wrote:
sehe ich es richtig dass ich in Qt von einer als const deklarierten Memberfunktion kein Signal mit "emit" senden kann?
Das kann gut sein. Ich habe mich zunächst über diese vermeintliche Einschränkung gewundert. Aber bei näherer Betrachtung kommt man sehr schnell darauf, daß es eigentlich nur im extremsten Sonderfall passiert, daß eine Methode, die mit "emit" ein Signal aussendet, const sein kann: Ein Qt-Signal zeigt ja von der Idee her an, daß sich der Status eines Widgets geändert hat (damit verbunden sind in der Regel Änderungen an Membervariablen des Objekts), also eben genau das Gegenteil von const. Ich habe mal meine Qt-Programme (z.B. YaST2-Qt, KDirStat) durchgesehen und tatsächlich nicht einen einzigen Fall gefunden, wo eine Methode, die "emit" aufruft, sinnvollerweise const sein sollte oder auch nur könnte. Fazit: Überleg' Dir gut, ob Du das wirklich willst, was Du da vorhast. ;-)
Hat dies einen logischen Hintergrund oder ist es einfach nur so weil es bis jetzt keiner implementiert hat?
Das kommt wohl von der Art, wie Signals und Slots als Aufsatz auf C++ implementiert sind. Schau' Dir mal eines der von "moc" generierten Files an; da wirst Du für jedes Deiner Q_OBJECTS eine qt_emit() -Methode finden, über die alle "emit"-Aufrufe dieser Klasse abgewickelt werden. Und dieses qt_emit() ist eben nicht const - wohl aus internen Gründen. CU -- Stefan Hundhammer <sh@suse.de> Penguin by conviction. YaST2 Development SuSE Linux AG Nuernberg, Germany