
Qt рдЕрдкрдиреЗ рд╕рд┐рдЧреНрдирд▓ рдФрд░ рд╕реНрд▓реЙрдЯ рддрдВрддреНрд░ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ? рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ, рд╣рдо
QObject рдФрд░
QMetaObject рдХреЗ
рдЗрдирд╕рд╛рдЗрдб рдХрд╛ рдкрддрд╛
рд▓рдЧрд╛рддреЗ рд╣реИрдВ рдФрд░ рдкрд░реНрджреЗ рдХреЗ рдкреАрдЫреЗ рд╕реЗ рдЙрдирдХреЗ рдХрд╛рдо рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ Qt5 рдХреЛрдб рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛, рдХрднреА-рдХрднреА рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдФрд░ рд╕реНрд╡рд░реВрдкрдг рдХреЗ рд▓рд┐рдП рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕рд┐рдЧреНрдирд▓ рдФрд░ рд╕реНрд▓реЙрдЯ
рд╢реБрд░реБрдЖрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ
рдЙрджрд╛рд╣рд░рдг рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рд╕рд┐рдЧреНрдирд▓ рдФрд░ рд╕реНрд▓реЙрдЯ рдХреНрдпрд╛ рджрд┐рдЦрддреЗ рд╣реИрдВред рд╢реАрд░реНрд╖ рд▓реЗрдЦ рдлрд╝рд╛рдЗрд▓ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
class Counter : public QObject { Q_OBJECT int m_value; public: int value() const { return m_value; } public slots: void setValue(int value); signals: void valueChanged(int newValue); };
рдХрд╣реАрдВ рди рдХрд╣реАрдВ, рдПрдХ .cpp рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рд╣рдо
setValue () рд▓рд╛рдЧреВ
рдХрд░рддреЗ рд╣реИрдВ :
void Counter::setValue(int value) { if (value != m_value) { m_value = value; emit valueChanged(value); } }
рдлрд┐рд░, рд╣рдо рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдЙрдВрдЯрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
Counter a, b; QObject::connect(&a, SIGNAL(valueChanged(int)), &b, SLOT(setValue(int))); a.setValue(12);
рдпрд╣ рдореВрд▓ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реИ рдЬреЛ 1992 рдореЗрдВ рдХреНрдпреВрдЯреА рд╢реБрд░реВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗ рдореБрд╢реНрдХрд┐рд▓ рд╕реЗ рдмрджрд▓ рдЧрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рднрд▓реЗ рд╣реА рдХреЛрд░ рдПрдкреАрдЖрдИ рдирд╣реАрдВ рдмрджрд▓рд╛ рдЧрдпрд╛ рд╣реЛ, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрдИ рдмрд╛рд░ рдмрджрд▓ рдЧрдпрд╛ рд╣реИред рд╣реБрдб рдХреЗ рддрд╣рдд, рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдФрд░ рдЕрдиреНрдп рдЪреАрдЬреЗрдВ рд╣реБрдИрдВред рдпрд╣рд╛рдВ рдХреЛрдИ рдЬрд╛рджреВ рдирд╣реАрдВ рд╣реИ рдФрд░ рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
MOC рдпрд╛ рдореЗрдЯрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрдВрдкрд╛рдЗрд▓рд░
рд╕рд┐рдЧреНрдирд▓ рдФрд░ рд╕реНрд▓реЙрдЯ, рд╕рд╛рде рд╣реА рдЧреБрдгреЛрдВ рдХреА рдХреНрдпреВрдЯреА рдкреНрд░рдгрд╛рд▓реА, рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЖрддреНрдо-рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдЖрддреНрдордирд┐рд░реАрдХреНрд╖рдг рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЗ рддрд░реАрдХреЛрдВ рдФрд░ рдЧреБрдгреЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдФрд░ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЙрдирдХреЗ рддрд░реНрдХреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред
QtScript рдФрд░
QML рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рд╢рд╛рдпрдж рд╣реА рд╕рдВрднрд╡ рд╣реЛрддрд╛ред
рд╕реА ++ рджреЗрд╢реА рдЖрддреНрдордирд┐рд░реАрдХреНрд╖рдг рд╕рд╣рд╛рдпрддрд╛ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреНрдпреВрдЯреА рдПрдХ рдЙрдкрдХрд░рдг рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдЯреВрд▓ рдХреЛ
MOC рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдХреЛрдб рдЬрдирд░реЗрдЯрд░ рд╣реИ (рд▓реЗрдХрд┐рди рдПрдХ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдирд╣реАрдВ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдХреБрдЫ рд▓реЛрдЧ рд╕реЛрдЪрддреЗ рд╣реИрдВ)ред
рдпрд╣ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд C ++ рдлрд╝рд╛рдЗрд▓ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдмрд╛рдХреА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЙрддреНрдкрдиреНрди C ++ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЖрддреНрдордирд┐рд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рд╣реИред
рдХреНрдпреВрдЯреА рдХреЛ рдХрднреА-рдХрднреА рднрд╛рд╖рд╛ рд╢реБрджреНрдзрддрд╛рд╡рд╛рджрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЖрд▓реЛрдЪрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб рдЬрдирд░реЗрдЯрд░ рд╣реИред рдореИрдВ рдХреНрдпреВрдЯреА рдкреНрд░рд▓реЗрдЦрди
рдХреЛ рдЗрд╕ рдЖрд▓реЛрдЪрдирд╛
рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐
рджреВрдВрдЧрд╛ ред рдХреЛрдб рдЬрдирд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдЧрд▓рдд рдирд╣реАрдВ рд╣реИ рдФрд░
MOC рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рд╕рд╣рд╛рдпрдХ рд╣реИред
рдореИрдЬрд┐рдХ рдореИрдХреНрд░реЛрдВ
рдХреНрдпрд╛ рдЖрдк рдРрд╕реЗ рдХреАрд╡рд░реНрдб рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ C ++ рдХреАрд╡рд░реНрдб рдирд╣реАрдВ рд╣реИрдВ?
рд╕рдВрдХреЗрдд ,
рд╕реНрд▓реЙрдЯреНрд╕ ,
Q_OBJECT ,
emit ,
SIGNAL ,
SLOT ред рдЙрдиреНрд╣реЗрдВ C ++ рдХреЗ рд▓рд┐рдП Qt рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдпреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд░рд▓ рдореИрдХреНрд░реЛрдЬрд╝ рд╣реИрдВ рдЬреЛ рдХрд╝реЛрдмрд┐рдЬрд╝рдбреЗрдлрд╝рд┐рд╢ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВред
#define signals public #define slots
рд╕рдЪ рд╣реИ, рд╕рд┐рдЧреНрдирд▓ рдФрд░ рд╕реНрд▓реЙрдЯ рд╕рд░рд▓ рдХрд╛рд░реНрдп рд╣реИрдВ: рд╕рдВрдХрд▓рдХ рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреА рддрд░рд╣ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИред рдореИрдХреНрд░реЛрдЬрд╝ рдЕрднреА рднреА рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджреНрджреЗрд╢реНрдп рдХреА рд╕реЗрд╡рд╛ рдХрд░рддреЗ рд╣реИрдВ:
рдПрдордУрд╕реА рдЙрдиреНрд╣реЗрдВ рджреЗрдЦрддрд╛ рд╣реИред рд╕рдВрдХреЗрдд Qt4 рдФрд░ рдкрд╣рд▓реЗ рдХреЗ рд╕рдВрд░рдХреНрд╖рд┐рдд рдЦрдВрдб рдореЗрдВ рдереЗред рд▓реЗрдХрд┐рди Qt5 рдореЗрдВ рд╡реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирдП
рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрд▓реЗ рд╣реИрдВред
#define Q_OBJECT \ public: \ static const QMetaObject staticMetaObject; \ virtual const QMetaObject *metaObject() const; \ virtual void *qt_metacast(const char *); \ virtual int qt_metacall(QMetaObject::Call, int, void **); \ QT_TR_FUNCTIONS \ private: \ Q_DECL_HIDDEN static void qt_static_metacall(QObject *, QMetaObject::Call, int, void **);
Q_OBJECT рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рдФрд░ рдПрдХ рд╕реНрдерд┐рд░
QMetaObject рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпреЗ рдХрд╛рд░реНрдп
MOC рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
#define emit
рдПрдорд┐рдЯ рдПрдХ рдЦрд╛рд▓реА рдореИрдХреНрд░реЛ рд╣реИред рдпрд╣
MOC рдХреЛ рдкрд╛рд░реНрд╕ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ,
рдЙрддреНрд╕рд░реНрдЬрди рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ (рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреЗрдд рдХреЗ рдЕрд▓рд╛рд╡рд╛)ред
Q_CORE_EXPORT const char *qFlagLocation(const char *method); #ifndef QT_NO_DEBUG # define QLOCATION "\0" __FILE__ ":" QTOSTRING(__LINE__) # define SLOT(a) qFlagLocation("1"#a QLOCATION) # define SIGNAL(a) qFlagLocation("2"#a QLOCATION) #else # define SLOT(a) "1"#a # define SIGNAL(a) "2"#a #endif
рдЗрди рдореИрдХреНрд░реЛрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рджреНрд╡рд╛рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдмрджрд▓рдиреЗ рдФрд░ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдХреЛрдб рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдбрд┐рдмрдЧ рдореЛрдб рдореЗрдВ, рд╣рдо рд╕рд┐рдЧреНрдирд▓ рдХреЗ рд╕рд╛рде рдХрдиреЗрдХреНрд╢рди рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдиреЗ рдкрд░ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕реНрдерд╛рди рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрди рдХреЛ рднреА рдкреВрд░рдХ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП Qt 4.5 рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреМрди рд╕реА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рдкрдВрдХреНрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реИ, рд╣рдо
qFlagLocation рдХрд╛ рдЙрдкрдпреЛрдЧ
рдХрд░рддреЗ рд╣реИрдВ , рдЬреЛ рджреЛ рд╕рдорд╛рд╡реЗрд╢рди рдХреЗ рд╕рд╛рде рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкрдВрдХреНрддрд┐ рдХреЗ рдкрддреЗ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддрд╛ рд╣реИред
рдЕрдм
MOC рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдХреЛрдб рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред
QMetaObject
const QMetaObject Counter::staticMetaObject = { { &QObject::staticMetaObject, qt_meta_stringdata_Counter.data, qt_meta_data_Counter, qt_static_metacall, 0, 0 } }; const QMetaObject *Counter::metaObject() const { return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; }
рдпрд╣рд╛рдВ рд╣рдо
рдХрд╛рдЙрдВрдЯрд░ :: рдореЗрдЯрд╛рдСрдмреНрдЬреЗрдХреНрдЯ () рдФрд░
рдХрд╛рдЙрдВрдЯрд░ :: staticMetaObject рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджреЗрдЦрддреЗ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ
Q_OBJECT рдореИрдХреНрд░реЛ рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред QObject :: d_ptr-> metaObject рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдбрд╛рдпрдирд╛рдорд┐рдХ рдореЗрдЯрд╛ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ (
QML рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕) рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╡рд░реНрдЪреБрдЕрд▓ рдлрд╝рдВрдХреНрд╢рди
metaObject () рдмрд╕ рдПрдХ staticMetaObject рдХреНрд▓рд╛рд╕ рджреЗрддрд╛ рд╣реИред staticMetaObject рд░реАрдб-рдУрдирд▓реА рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред QMetaObject рдХреЛ qobjectdefs.h рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
struct QMetaObject { enum Call { InvokeMetaMethod, ReadProperty, WriteProperty, }; struct {
рдбреА рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ рдЗрд╕ рдмрд╛рдд рдХрд╛ рдкреНрд░рддреАрдХ рд╣реИ рдХрд┐ рд╕рднреА рд╕рджрд╕реНрдпреЛрдВ рдХреЛ рдЫрд┐рдкрд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рд╡реЗ POD рдФрд░ рд╕реНрдереИрддрд┐рдХ рдкреНрд░рд╛рд░рдВрдн рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЫрд┐рдкреЗ рдирд╣реАрдВ рд╣реИрдВред
QMetaObject рдХреЛ рдкреИрд░реЗрдВрдЯ рдХреНрд▓рд╛рд╕ рд╕реБрдкрд░рдбреЗрдЯрд╛ рдХреА рдореЗрдЯрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ (QObject :: staticMetaObject рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд░рдВрднреАрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕реНрдЯреНрд░реИрдВрдбрд┐рдВрдЧрдЯрд╛ рдФрд░ рдбреЗрдЯрд╛ рдХреЛ рдХреБрдЫ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдЖрд░рдВрднреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рдмрд╛рдж рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред static_metacall рдХрд╛рдЙрдВрдЯрд░ рджреНрд╡рд╛рд░рд╛ рд╢реБрд░реВ рдХрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рд╕реВрдЪрдХ рд╣реИ :: qt_static_metacallред
рдЖрддреНрдордирд┐рд░реАрдХреНрд╖рдг рд╕рд╛рд░рдгреА
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП
QMetaObject рдХреЗ рдореВрд▓ рдбреЗрдЯрд╛ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред
static const uint qt_meta_data_Counter[] = {
рдкрд╣рд▓реЗ 13 рдЗрдВрдЪ рд╣реЗрдбрд░ рдмрдирд╛рддреЗ рд╣реИрдВред рдпрд╣ рджреЛ рдХреЙрд▓рдо рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдкрд╣рд▓рд╛ рдХреЙрд▓рдо рдорд╛рддреНрд░рд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдЙрд╕ рд╕рд░рдгреА рдХрд╛ рд╕реВрдЪрдХрд╛рдВрдХ рд╣реИ рдЬрд╣рд╛рдВ рд╡рд┐рд╡рд░рдг рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рд╡рд░реНрддрдорд╛рди рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВ, рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди 14 рдХреЗ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдореЗрдВ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред
рд╡рд┐рдзрд┐ рдХрд╛ рд╡рд░реНрдгрди 5 int рдХреЗ рд╣реЛрддреЗ рд╣реИрдВред рдкрд╣рд▓рд╛ рдирд╛рдо рд╣реИ, рдкрдВрдХреНрддрд┐ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕реВрдЪрдХрд╛рдВрдХ (рд╣рдо рдмрд╛рдж рдореЗрдВ рдЗрд╕рдХреА рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЬрд╛рдВрдЪ рдХрд░реЗрдВрдЧреЗ)ред рджреВрд╕рд░рд╛ рдкреВрд░реНрдгрд╛рдВрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рдж рд╕реВрдЪрдХрд╛рдВрдХ, рдЬрд╣рд╛рдВ рд╣рдо рдЙрдирдХрд╛ рд╡рд░реНрдгрди рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдм рд╣рдо рдЯреИрдЧ рдФрд░ рдЭрдВрдбреЗ рдХреЛ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░реЗрдВрдЧреЗред рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП,
MOC рдкреНрд░рддреНрдпреЗрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░, рдЙрдирдХреЗ рдкреНрд░рдХрд╛рд░ рдФрд░ рдирд╛рдо рд╕реВрдЪрдХрд╛рдВрдХ рдХреЛ рднреА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред
рдкрдВрдХреНрддрд┐ рддрд╛рд▓рд┐рдХрд╛
struct qt_meta_stringdata_Counter_t { QByteArrayData data[6]; char stringdata[47]; }; #define QT_MOC_LITERAL(idx, ofs, len) \ Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ offsetof(qt_meta_stringdata_Counter_t, stringdata) + ofs \ - idx * sizeof(QByteArrayData) \ ) static const qt_meta_stringdata_Counter_t qt_meta_stringdata_Counter = { { QT_MOC_LITERAL(0, 0, 7), QT_MOC_LITERAL(1, 8, 12), QT_MOC_LITERAL(2, 21, 0), QT_MOC_LITERAL(3, 22, 8), QT_MOC_LITERAL(4, 31, 8), QT_MOC_LITERAL(5, 40, 5) }, ""Counter\0valueChanged\0\0newValue\0setValue\0"" ""value\0"" }; #undef QT_MOC_LITERAL
рдореВрд▓ рд░реВрдк рд╕реЗ, рдпрд╣ рдПрдХ рд╕реНрдерд┐рд░ QByteArray рд╕рд░рдгреА (
QT_MOC_LITERAL рдореИрдХреНрд░реЛ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ) рд╣реИ, рдЬреЛ рдиреАрдЪреЗ рджреА рдЧрдИ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред
рд╕рдВрдХреЗрдд
MOC рд╕рдВрдХреЗрддреЛрдВ рдХреЛ рднреА рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рд╡реЗ рдХрд╛рд░реНрдп рд╣реИрдВ рдЬреЛ рдХреЗрд╡рд▓ рддрд░реНрдХреЛрдВ рдХреЗ рд▓рд┐рдП
рд╡реНрдпреВрдЕрд░ рдХрд╛ рдПрдХ рд╕рд░рдгреА рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ
QMetaObject :: рд╕рдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд╕ рдХрд░рддреЗ
рд╣реИрдВ ред рд╕рд░рдгреА рдХрд╛ рдкрд╣рд▓рд╛ рддрддреНрд╡ рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рд╣реИред рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдпрд╣ 0 рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рд╢реВрдиреНрдп рд╣реИред рддреАрд╕рд░реЗ рддрд░реНрдХ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд░рд┐рдд рд╕рдВрдХреЗрдд рд╕реВрдЪрдХрд╛рдВрдХ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ 0) рд╣реИред
рд╕реНрд▓реЙрдЯ рдХреЙрд▓
Qt_static_metacall рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕рдХреЗ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рджреНрд╡рд╛рд░рд╛ рдПрдХ рд╕реНрд▓реЙрдЯ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рднреА рд╕рдВрднрд╡ рд╣реИ:
void Counter::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) { if (_c == QMetaObject::InvokeMetaMethod) { Counter *_t = static_cast<Counter *>(_o); switch (_id) { case 0: _t->valueChanged((*reinterpret_cast< int(*)>(_a[1]))); break; case 1: _t->setValue((*reinterpret_cast< int(*)>(_a[1]))); break; default: ; } ... } ... }
рд╕рдВрдХреЗрдд рдореЗрдВ рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреЗрдд рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╣реА рдкреНрд░рд╛рд░реВрдк рдореЗрдВред _a [0] рдХреЛ рдЫреБрдЖ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╢реВрдиреНрдп рд╣рд░ рдЬрдЧрд╣ рд▓реМрдЯрддрд╛ рд╣реИред
рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдзреНрдпрд╛рди рджреЗрдВ
рдкреНрд░рддреНрдпреЗрдХ
QMetaObject рдХреЗ рд▓рд┐рдП , рд╕рд┐рдЧреНрдирд▓, рд╕реНрд▓реЙрдЯ, рдФрд░ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЕрдиреНрдп рддрдерд╛рдХрдерд┐рдд рддрд░реАрдХреЗ, рдЗрдВрдбреЗрдХреНрд╕ 0. рд╕реЗ рд╢реБрд░реВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рдСрд░реНрдбрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╕рд┐рдЧреНрдирд▓ рдкрд╣рд▓реЗ рдЖрдПрдВ, рдлрд┐рд░ рд╕реНрд▓реЙрдЯ рдФрд░ рдлрд┐рд░ рдЕрдиреНрдп рддрд░реАрдХреЗред рдЕрдВрджрд░ рдХреЗ рдЗрди рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреЛ рд╕рд╛рдкреЗрдХреНрд╖ рд╕реВрдЪрдХрд╛рдВрдХ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрдирдореЗрдВ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╣рдо рдПрдХ рдЕрдзрд┐рдХ рд╡реИрд╢реНрд╡рд┐рдХ рд╕реВрдЪрдХрд╛рдВрдХ рдирд╣реАрдВ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдЧ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рд░рд╛рд╕рдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдЕрдиреНрдп рд╕рднреА рддрд░реАрдХреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдмрд╕ рд╕рд╛рдкреЗрдХреНрд╖ рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ рдПрдХ рдСрдлрд╕реЗрдЯ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдкреВрд░реНрдг рд╕реВрдЪрдХрд╛рдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЗрд╕ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЛ рдлреЙрд░реНрдо QMetaObject :: indexOf {рд╕рд┐рдЧреНрдирд▓, рд╕реНрд▓реЙрдЯ, рд╡рд┐рдзрд┐} рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЬреБрдбрд╝рдиреЗ рдХрд╛ рддрдВрддреНрд░ рд╕рдВрдХреЗрддреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреНрд░рдорд┐рдд рдПрдХ рд╕рд░рдгреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╕рднреА рд╕реНрд▓реЙрдЯ рдЗрд╕ рд╕рд░рдгреА рдореЗрдВ рдПрдХ рд╕реНрдерд╛рди рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЖрдорддреМрд░ рдкрд░ рд╕рдВрдХреЗрддреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реНрд▓реЙрдЯ рд╣реЛрддреЗ рд╣реИрдВред рддреЛ, рдХреНрдпреВрдЯреА 4.6 рдХреЗ рд╕рд╛рде, рд╕рдВрдХреЗрддреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдЖрдВрддрд░рд┐рдХ рд╕реВрдЪрдХрд╛рдВрдХ рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХреЗрд╡рд▓ рд╕рдВрдХреЗрддреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕реВрдЪрдХрд╛рдВрдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдХреНрдпреВрдЯреА рдХреЗ рд╕рд╛рде рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЬрдм рдЖрдк
QObject рдХреЗ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рджреЗрдЦ рд░рд╣реЗ
рд╣реЛрдВ , рддреЛ рдЖрдкрдХреЛ рдЗрди рддреАрдиреЛрдВ рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдХрдиреЗрдХреНрд╢рди рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╕рдордп рдкрд╣рд▓реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╕рд┐рдЧреНрдирд▓ рдФрд░ рд╕реНрд▓реЙрдЯ рдЗрдВрдбреЗрдХреНрд╕ рдХреЛ рджреЗрдЦрдирд╛ рд╣реИред Qt рд╕рдВрдмрдВрдзрд┐рдд рдЕрдиреБрдХреНрд░рдорд┐рдд рдХреА рдЦреЛрдЬ рдореЗрдВ рдореЗрдЯрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдкрдВрдХреНрддрд┐ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рд╕реНрдХреИрди рдХрд░реЗрдЧрд╛ред рдлрд┐рд░, рдПрдХ QObjectPStreet :: рдХрдиреЗрдХреНрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЖрдВрддрд░рд┐рдХ рд╕реВрдЪрд┐рдпреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкреНрд░рддреНрдпреЗрдХ рдХрдиреЗрдХреНрд╢рди рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЬрд╛рдирдХрд╛рд░реА рдЖрд╡рд╢реНрдпрдХ рд╣реИ? рд╣рдореЗрдВ рджрд┐рдП рдЧрдП рд╕рд┐рдЧреНрдирд▓ рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдХрдиреЗрдХреНрд╢рди рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЪрд╛рд╣рд┐рдПред рдЪреВрдВрдХрд┐ рдПрдХ рд╣реА рд╕рд┐рдЧреНрдирд▓ рд╕реЗ рдХрдИ рд╕реНрд▓реЙрдЯ рдЬреБрдбрд╝реЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╕рд┐рдЧреНрдирд▓ рдХреЗ рд▓рд┐рдП рдХрдиреЗрдХреНрдЯреЗрдб рд╕реНрд▓реЙрдЯреНрд╕ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдкреНрд░рддреНрдпреЗрдХ рдХрдиреЗрдХреНрд╢рди рдореЗрдВ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдФрд░ рд╕реНрд▓реЙрдЯ рдЗрдВрдбреЗрдХреНрд╕ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдо рдпрд╣ рднреА рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдХреЗ рд╣рдЯрд╛рдП рдЬрд╛рдиреЗ рдкрд░ рдХрдиреЗрдХреНрд╢рди рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╣рдЯрд╛ рджрд┐рдП рдЬрд╛рдПрдВ, рдЗрд╕рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдХреЛ рдпрд╣ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╡рд╣ рдХрд┐рд╕рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИ рддрд╛рдХрд┐ рд╡рд╣ рдХрдиреЗрдХреНрд╢рди рд╣рдЯрд╛ рд╕рдХреЗред
рдпрд╣рд╛рдБ QObjectPStreet :: Qobject_p.h рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрдиреЗрдХреНрд╢рди рд╣реИ:
struct QObjectPrivate::Connection { QObject *sender; QObject *receiver; union { StaticMetaCallFunction callFunction; QtPrivate::QSlotObjectBase *slotObj; };
рдкреНрд░рддреНрдпреЗрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдХрдиреЗрдХреНрд╢рди рдХреА рдПрдХ рд╕рд░рдгреА рд╣реЛрддреА рд╣реИ: рдпрд╣ рдПрдХ рд╕рд░рдгреА рд╣реИ рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рд╕рд┐рдЧреНрдирд▓ рдХреЛ QObjectPrivate :: рдХрдиреЗрдХреНрд╢рди рд╕реВрдЪреА рд╕реЗ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╡рд┐рд▓реЛрдкрди рдХреЗ рд▓рд┐рдП рдЬреБрдбрд╝реА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдХрдиреЗрдХреНрд╢рди рдХреА рдЙрд▓рдЯреА рд╕реВрдЪреА рднреА рд╣реЛрддреА рд╣реИред рдпрд╣ рдПрдХ рдбрдмрд▓ рд▓рд┐рдВрдХ рдХреА рдЧрдИ рд╕реВрдЪреА рд╣реИред

рд▓рд┐рдВрдХ рдХреА рдЧрдИ рд╕реВрдЪрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡реЗ QObjectPrivate :: рдХрдиреЗрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдЕрдЧрд▓реЗ / рдкрд┐рдЫрд▓реЗ рдиреЛрдб рдХреЗ рд▓рд┐рдП рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкреНрд░реЗрд╖рдХ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╕реВрдЪрдХ рдПрдХ рд╕реВрдЪрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реВрдЪрдХ рд╣реИред рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд┐рдЫрд▓реЗ рдиреЛрдб рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдЕрдЧрд▓реЗ рдиреЛрдб рдХреЗ рд▓рд┐рдПред рдЗрд╕ рд╕реВрдЪрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рддрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдХрдиреЗрдХреНрд╢рди рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рд╕рдВрдХреЗрдд рдЙрддреНрд╕рд░реНрдЬрди
рдЬрдм рд╣рдо рд╕рд┐рдЧреНрдирд▓ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдордиреЗ рджреЗрдЦрд╛ рдХрд┐ рдпрд╣
MOC рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдХреЛрдб рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА
QMetaObject :: рдХреЙрд▓ рдХреЛ
рд╕рдХреНрд░рд┐рдп рдХрд░рддрд╛ рд╣реИ ред рдпрд╣рд╛рдБ qobject.cpp рдореЗрдВ рдЗрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди (рдиреЛрдЯреНрд╕ рдХреЗ рд╕рд╛рде) рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
void QMetaObject::activate(QObject *sender, const QMetaObject *m, int local_signal_index, void **argv) { activate(sender, QMetaObjectPrivate::signalOffset(m), local_signal_index, argv); } void QMetaObject::activate(QObject *sender, int signalOffset, int local_signal_index, void **argv) { int signal_index = signalOffset + local_signal_index; if (!sender->d_func()->isSignalConnected(signal_index)) return;
UPD :
рдпрд╣рд╛рдВ рджреВрд╕рд░реЗ рднрд╛рдЧ
рдХрд╛ рдЕрдиреБрд╡рд╛рджред