Um Signale/slots mit dem meta-Objekt-compiler aufgerufen werden. Um dieses geschehen zu lassen die Klasse sollte folgende Anforderungen erfüllen:
Erben von QObject oder andere Unterklasse (z.B. QWidget, QPushButton etc)
Die Q_OBJECT makro definiert werden sollte, in den private-Abschnitt der Klasse, um zu ermöglichen, meta-Objekt-features wie slots
Verwenden Sie die Qt keywords slots und signals um zu erklären, welche Funktionen sollte werden behandelt, indem die meta-compiler wie Spielautomaten oder Signale
Beachten Sie, dass die Q_OBJECT makro ist obligatorisch für alle Objekte, die Signale, slots oder properties. Sie müssen auch laufen
Meta Object Compiler auf die Quelldatei. Wir empfehlen dringend die Verwendung
dieses makro in allen Unterklassen der QObject-unabhängig davon, ob oder
nicht Sie tatsächlich nutzen, Signale, slots und Eigenschaften, da Fehler auf
dies kann dazu führen, bestimmte Funktionen zu zeigen seltsames Verhalten.
Wichtiger aber während dies nicht möglich ist, in Qt-4 IST es möglich, in Qt-5, mit dem neuen signal/slot-Mechanismus. qt-project.org/wiki/New_Signal_Slot_Syntax Du hast Recht, aber IMHO sollte es nur in seltenen Fällen verwendet. Über slots ist eleganter als die Verwendung von tr1::bind mit einfachen Funktionen. ich Stimme absolut, dass Sie sollten ein Seltenes Ereignis. Viel wie short cirquit if-Anweisungen, Sie sind nützlich in einer sehr schmalen Reihe von Umständen, und in diesen Fällen erhöhen die Lesbarkeit und Wartungsfreundlichkeit. Aber Sie sollte nur verwendet werden, dann nicht als eine Allgemeine Regel.
In Qt 4, das ist nicht direkt unterstützt, aber es gibt ein paar Bibliotheken, die diese Funktionalität bieten, indem Sie die Proxyfunktion das signal über einen slot in einer versteckten QObject, die ruft dann Ihre nicht-slot-Funktion. Mein Versuch, diese finden Sie unter https://github.com/robertknight/qt-signal-tools . Es gibt links zu anderen Implementierungen, die auf der Unterseite der README-Datei.
Unwahrscheinlich. Die Qt-meta-object-compiler (moc) die Funktion umschließt, gekennzeichnet sind, als slot-s, in relativ großen code-wrapper. Dateien, erstellt von moc, beginnen mit moc_, schauen Sie.
Sie nicht in Qt-Versionen < Qt 5.
Um Signale/slots mit dem meta-Objekt-compiler aufgerufen werden. Um dieses geschehen zu lassen die Klasse sollte folgende Anforderungen erfüllen:
QObject
oder andere Unterklasse (z.B.QWidget
,QPushButton
etc)Q_OBJECT
makro definiert werden sollte, in den private-Abschnitt der Klasse, um zu ermöglichen, meta-Objekt-features wie slotsQt
keywordsslots
undsignals
um zu erklären, welche Funktionen sollte werden behandelt, indem die meta-compiler wie Spielautomaten oder SignaleFür mehr details überprüfen Sie die entsprechenden Seiten der Dokumentation über die meta-object-system und die Signale & slots
Überprüfen Sie auch die
QObject
Dokumentation:Edit: Da Qt 5, funktoren und lambda-Ausdrücke können verwendet werden als slot. Sehen
Neue Signal-Slot-Syntax in Qt 5
Du hast Recht, aber IMHO sollte es nur in seltenen Fällen verwendet. Über slots ist eleganter als die Verwendung von tr1::bind mit einfachen Funktionen.
ich Stimme absolut, dass Sie sollten ein Seltenes Ereignis. Viel wie short cirquit if-Anweisungen, Sie sind nützlich in einer sehr schmalen Reihe von Umständen, und in diesen Fällen erhöhen die Lesbarkeit und Wartungsfreundlichkeit. Aber Sie sollte nur verwendet werden, dann nicht als eine Allgemeine Regel.
InformationsquelleAutor pnezis
Seit Qt 5, funktoren und lambda-Ausdrücke können verwendet werden als slot (wie zuvor schon erwähnt, hier: http://qt-project.org/wiki/New_Signal_Slot_Syntax).
Da konnte ich nicht finden, Beispiel-code habe ich noch folgende:
In diesem Beispiel verwendet
boost::function
für eine KlasseClassName::classMember()
ohne Parameter.Wenn das Qt-signal-und-Klasse-Mitglied Parametern (zum Beispiel
ClassName::classMember(int)
), die boost-Funktion sollte wie folgt angepasst:Mehr Informationen auf boost::bind finden Sie in der Dokumentation: http://www.boost.org/doc/libs/1_55_0/libs/bind/bind.html
InformationsquelleAutor c_k
In Qt 5 können Sie. Sehen http://qt-project.org/wiki/New_Signal_Slot_Syntax
In Qt 4, das ist nicht direkt unterstützt, aber es gibt ein paar Bibliotheken, die diese Funktionalität bieten, indem Sie die Proxyfunktion das signal über einen slot in einer versteckten QObject, die ruft dann Ihre nicht-slot-Funktion. Mein Versuch, diese finden Sie unter https://github.com/robertknight/qt-signal-tools . Es gibt links zu anderen Implementierungen, die auf der Unterseite der README-Datei.
InformationsquelleAutor Robert Knight
Unwahrscheinlich. Die Qt-meta-object-compiler (moc) die Funktion umschließt, gekennzeichnet sind, als slot-s, in relativ großen code-wrapper. Dateien, erstellt von moc, beginnen mit moc_, schauen Sie.
InformationsquelleAutor fat_lor_troll
Es ist genug, um Erben QObject: http://qt-project.org/doc/qt-4.8/signalsandslots.html
InformationsquelleAutor asclepix