{"id":214379,"date":"2014-03-03T02:09:04","date_gmt":"2014-03-02T22:09:04","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=214379"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=214379","title":{"rendered":"<span class=\"post_title\">\u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0438 \u0441\u043b\u043e\u0442\u044b \u0432 Qt<\/span>"},"content":{"rendered":"<div class=\"content html_format\">       <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/f24\/054\/8b6\/f240548b6171eda32a27b5ffde6e5483.png\"\/><br \/>  Qt \u0445\u043e\u0440\u043e\u0448\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d \u0441\u0432\u043e\u0438\u043c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u043c \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0438 \u0441\u043b\u043e\u0442\u043e\u0432. \u041d\u043e \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442? \u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u043c\u044b \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u0435\u043c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u0438 <b>QObject<\/b> \u0438 <b>QMetaObject<\/b> \u0438 \u0440\u0430\u0441\u043a\u0440\u043e\u0435\u043c \u0438\u0445 \u0440\u0430\u0431\u043e\u0442\u0443 \u0437\u0430 \u043a\u0430\u0434\u0440\u043e\u043c. \u042f \u0431\u0443\u0434\u0443 \u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u044b Qt5 \u043a\u043e\u0434\u0430, \u0438\u043d\u043e\u0433\u0434\u0430 \u043e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u043a\u0440\u0430\u0442\u043a\u043e\u0441\u0442\u0438 \u0438 \u0441 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h5>\u0421\u0438\u0433\u043d\u0430\u043b\u044b \u0438 \u0441\u043b\u043e\u0442\u044b<\/h5>\n<p>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430, \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043c, \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0438 \u0441\u043b\u043e\u0442\u044b, \u0437\u0430\u0433\u043b\u044f\u043d\u0443\u0432 \u0432 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 <a href=\"http:\/\/qt-project.org\/doc\/qt-4.8\/signalsandslots.html\">\u043f\u0440\u0438\u043c\u0435\u0440<\/a>. \u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cpp\">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); }; <\/code><\/pre>\n<p>  \u0413\u0434\u0435-\u0442\u043e, \u0432 .cpp \u0444\u0430\u0439\u043b\u0435, \u043c\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c <i>setValue()<\/i>:<\/p>\n<pre><code class=\"cpp\">void Counter::setValue(int value) {     if (value != m_value) {         m_value = value;         emit valueChanged(value);     } } <\/code><\/pre>\n<p>  \u0417\u0430\u0442\u0435\u043c, \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 Counter \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"cpp\">Counter a, b; QObject::connect(&a, SIGNAL(valueChanged(int)), &b, SLOT(setValue(int))); a.setValue(12);  \/\/ a.value() == 12, b.value() == 12 <\/code><\/pre>\n<p>  \u042d\u0442\u043e \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0438\u043d\u0430\u043a\u0441\u0438\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0447\u0442\u0438 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u043b\u0441\u044f \u0441 \u043d\u0430\u0447\u0430\u043b\u0430 Qt \u0432 1992 \u0433\u043e\u0434\u0443. \u041d\u043e \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0431\u0430\u0437\u043e\u0432\u043e\u0435 API \u043d\u0435 \u0431\u044b\u043b\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u043e, \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0436\u0435 \u043c\u0435\u043d\u044f\u043b\u0430\u0441\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437. \u041f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u043b\u0438\u0441\u044c \u043d\u043e\u0432\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0432\u0435\u0449\u0438. \u0422\u0443\u0442 \u043d\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u043c\u0430\u0433\u0438\u0438 \u0438 \u044f \u043f\u043e\u043a\u0430\u0436\u0443 \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<h5>MOC \u0438\u043b\u0438 \u043c\u0435\u0442\u0430\u043e\u0431\u044a\u0435\u043a\u0442\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440<\/h5>\n<p>  \u0421\u0438\u0433\u043d\u0430\u043b\u044b \u0438 \u0441\u043b\u043e\u0442\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 Qt, \u043e\u0441\u043d\u043e\u0432\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u0445 \u0441\u0430\u043c\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u0421\u0430\u043c\u043e\u0430\u043d\u0430\u043b\u0438\u0437 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u044b \u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0438 \u0438\u043c\u0435\u0442\u044c \u0432\u0441\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043f\u0440\u043e \u043d\u0438\u0445, \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043e \u0442\u0438\u043f\u0430\u0445 \u0438\u0445 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432. <b>QtScript<\/b> \u0438 <b>QML<\/b> \u0432\u0440\u044f\u0434 \u043b\u0438 \u0431\u044b\u043b \u0431\u044b \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b \u0431\u0435\u0437 \u044d\u0442\u043e\u0433\u043e.<\/p>\n<p>  C++ \u043d\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0440\u043e\u0434\u043d\u043e\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0441\u0430\u043c\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 Qt \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044d\u0442\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442. \u042d\u0442\u043e\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <b>MOC<\/b>. \u042d\u0442\u043e \u043a\u043e\u0434\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 (\u043d\u043e \u043d\u0435 \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440, \u043a\u0430\u043a \u0434\u0443\u043c\u0430\u044e\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043b\u044e\u0434\u0438).<\/p>\n<p>  \u041e\u043d \u043f\u0430\u0440\u0441\u0438\u0442 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 C++ \u0444\u0430\u0439\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u044c\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u042d\u0442\u043e\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 C++ \u0444\u0430\u0439\u043b \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u0441\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0443\u044e \u0434\u043b\u044f \u0441\u0430\u043c\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0430.<br \/>  Qt \u0438\u043d\u043e\u0433\u0434\u0430 \u043f\u043e\u0434\u0432\u0435\u0440\u0433\u0430\u0435\u0442\u0441\u044f \u043a\u0440\u0438\u0442\u0438\u043a\u0435 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u044f\u0437\u044b\u043a\u043e\u0432\u044b\u0445 \u043f\u0443\u0440\u0438\u0441\u0442\u043e\u0432, \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043a\u043e\u0434\u0430. \u042f \u043f\u043e\u0437\u0432\u043e\u043b\u044e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 Qt <a href=\"http:\/\/qt-project.org\/doc\/qt-4.8\/templates.html\">\u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c<\/a> \u043d\u0430 \u044d\u0442\u0443 \u043a\u0440\u0438\u0442\u0438\u043a\u0443. \u041d\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u043f\u043b\u043e\u0445\u043e\u0433\u043e \u0432 \u043a\u043e\u0434\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0435 \u0438 <b>MOC<\/b> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0432\u043e\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043f\u043e\u043c\u043e\u0449\u043d\u0438\u043a\u043e\u043c.<\/p>\n<h5>\u041c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u044b<\/h5>\n<p>  \u0421\u043c\u043e\u0436\u0435\u0442\u0435 \u043b\u0438 \u0432\u044b \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0441\u043b\u043e\u0432\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438 C++? <i>signals<\/i>, <i>slots<\/i>, <b>Q_OBJECT<\/b>, <i>emit<\/i>, <b>SIGNAL<\/b>, <b>SLOT<\/b>. \u041e\u043d\u0438 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b \u043a\u0430\u043a Qt-\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0434\u043b\u044f C++. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u0432 qobjectdefs.h.<\/p>\n<pre><code class=\"cpp\">#define signals public #define slots \/* nothing *\/ <\/code><\/pre>\n<p>  \u042d\u0442\u043e \u043f\u0440\u0430\u0432\u0434\u0430, \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0438 \u0441\u043b\u043e\u0442\u044b \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438: \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0438\u0445 \u043a\u0430\u043a \u0438 \u043b\u044e\u0431\u044b\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u041c\u0430\u043a\u0440\u043e\u0441\u044b \u0435\u0449\u0435 \u0441\u043b\u0443\u0436\u0430\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0439 \u0446\u0435\u043b\u0438: <b>MOC<\/b> \u0432\u0438\u0434\u0438\u0442 \u0438\u0445. \u0421\u0438\u0433\u043d\u0430\u043b\u044b \u0431\u044b\u043b\u0438 \u0432 \u0441\u0435\u043a\u0446\u0438\u0438 protected \u0432 Qt4 \u0438 \u0440\u0430\u043d\u0435\u0435. \u041d\u043e \u0432 Qt5 \u043e\u043d\u0438 \u0443\u0436\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u044b, \u0434\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u043d\u043e\u0432\u043e\u0433\u043e <a href=\"http:\/\/woboq.com\/blog\/new-signals-slots-syntax-in-qt5.html\">\u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430<\/a>.<\/p>\n<pre><code class=\"cpp\">#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 \/* \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 *\/ \\ private: \\     Q_DECL_HIDDEN static void qt_static_metacall(QObject *, QMetaObject::Call, int, void **); <\/code><\/pre>\n<p>   <b>Q_OBJECT<\/b> \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0441\u0432\u044f\u0437\u043a\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 <b>QMetaObject<\/b>. \u042d\u0442\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0432 \u0444\u0430\u0439\u043b\u0435, \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c <b>MOC<\/b>.<\/p>\n<pre><code class=\"cpp\">#define emit \/* nothing *\/ <\/code><\/pre>\n<p>  <i>emit<\/i> \u2013 \u043f\u0443\u0441\u0442\u043e\u0439 \u043c\u0430\u043a\u0440\u043e\u0441. \u041e\u043d \u0434\u0430\u0436\u0435 \u043d\u0435 \u043f\u0430\u0440\u0441\u0438\u0442\u0441\u044f <b>MOC<\/b>. \u0414\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, <i>emit<\/i> \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u0435\u043d \u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0437\u043d\u0430\u0447\u0438\u0442 (\u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430).<\/p>\n<pre><code class=\"cpp\">Q_CORE_EXPORT const char *qFlagLocation(const char *method); #ifndef QT_NO_DEBUG # define QLOCATION &quot;\\0&quot; __FILE__ &quot;:&quot; QTOSTRING(__LINE__) # define SLOT(a)     qFlagLocation(&quot;1&quot;#a QLOCATION) # define SIGNAL(a)   qFlagLocation(&quot;2&quot;#a QLOCATION) #else # define SLOT(a)     &quot;1&quot;#a # define SIGNAL(a)   &quot;2&quot;#a #endif <\/code><\/pre>\n<p>  \u042d\u0442\u0438 \u043c\u0430\u043a\u0440\u043e\u0441\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u043c \u0434\u043b\u044f \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0432 \u0441\u0442\u0440\u043e\u043a\u0443 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435. \u0412 \u0440\u0435\u0436\u0438\u043c\u0435 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u043c\u044b \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0441\u0442\u0440\u043e\u043a\u0443 \u0441 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u0444\u0430\u0439\u043b\u0430 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435\u043c, \u0435\u0441\u043b\u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u043c \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u042d\u0442\u043e \u0431\u044b\u043b\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043e \u0432 Qt 4.5 \u0434\u043b\u044f \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438. \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0443\u0437\u043d\u0430\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0441\u0442\u0440\u043e\u043a\u0435, \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c <i>qFlagLocation<\/i>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u0430\u0434\u0440\u0435\u0441 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435, \u0441 \u0434\u0432\u0443\u043c\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f\u043c\u0438.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a \u043a\u043e\u0434\u0443, \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c\u0443 <b>MOC<\/b>.<\/p>\n<h5>QMetaObject<\/h5>\n<p>  <\/p>\n<pre><code class=\"cpp\">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-&gt;metaObject ? QObject::d_ptr-&gt;dynamicMetaObject() : &staticMetaObject; } <\/code><\/pre>\n<p>  \u0422\u0443\u0442 \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e <i>Counter::metaObject()<\/i> \u0438 <i>Counter::staticMetaObject<\/i>. \u041e\u043d\u0438 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u044b\u0439 \u0432 \u043c\u0430\u043a\u0440\u043e\u0441\u0435 <b>Q_OBJECT<\/b>. QObject::d_ptr-&gt;metaObject \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043c\u0435\u0442\u0430\u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 (<b>QML<\/b> \u043e\u0431\u044a\u0435\u043a\u0442\u044b), \u043f\u043e\u044d\u0442\u043e\u043c\u0443, \u0432 \u043e\u0431\u0449\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f <i>metaObject()<\/i> \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u043e\u0437\u0440\u0430\u0449\u0430\u0435\u0442 staticMetaObject \u043a\u043b\u0430\u0441\u0441\u0430. staticMetaObject \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f. <b>QMetaObject<\/b> \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d \u0432 qobjectdefs.h \u0432 \u0432\u0438\u0434\u0435:<\/p>\n<pre><code class=\"cpp\">struct QMetaObject {     \/* ... \u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d\u044b \u0432\u0441\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b ... *\/     enum Call { InvokeMetaMethod, ReadProperty, WriteProperty, \/*...*\/ };     struct { \/\/ \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435         const QMetaObject *superdata;         const QByteArrayData *stringdata;         const uint *data;         typedef void (*StaticMetacallFunction)(QObject *, QMetaObject::Call, int, void **);         StaticMetacallFunction static_metacall;         const QMetaObject **relatedMetaObjects;         void *extradata; \/\/ \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0434\u043b\u044f \u0431\u0443\u0434\u0443\u0449\u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f     } d; }; <\/code><\/pre>\n<p>  d \u043a\u043e\u0441\u0432\u0435\u043d\u043d\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043e \u0432\u0441\u0435 \u0447\u043b\u0435\u043d\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0441\u043e\u043a\u0440\u044b\u0442\u044b, \u043d\u043e \u043e\u043d\u0438 \u043d\u0435 \u0441\u043e\u043a\u0440\u044b\u0442\u044b \u0434\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 POD \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<p>  <b>QMetaObject<\/b> \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0435\u0442\u0430\u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 superdata (QObject::staticMetaObject \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435). stringdata \u0438 data \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u0434\u0430\u043b\u0435\u0435. static_metacall \u044d\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c\u044b\u0439 Counter::qt_static_metacall.<\/p>\n<h5>\u0422\u0430\u0431\u043b\u0438\u0446\u044b \u0441\u0430\u043c\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0430<\/h5>\n<p>  \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 <b>QMetaObject<\/b>.<\/p>\n<pre><code class=\"cpp\">static const uint qt_meta_data_Counter[] = {  \/\/ content:        7,       \/\/ revision        0,       \/\/ classname        0,    0, \/\/ classinfo        2,   14, \/\/ methods        0,    0, \/\/ properties        0,    0, \/\/ enums\/sets        0,    0, \/\/ constructors        0,       \/\/ flags        1,       \/\/ signalCount  \/\/ signals: name, argc, parameters, tag, flags        1,    1,   24,    2, 0x05,  \/\/ slots: name, argc, parameters, tag, flags        4,    1,   27,    2, 0x0a,  \/\/ signals: parameters     QMetaType::Void, QMetaType::Int,    3,  \/\/ slots: parameters     QMetaType::Void, QMetaType::Int,    5,        0        \/\/ eod }; <\/code><\/pre>\n<p>  \u041f\u0435\u0440\u0432\u044b\u0435 13 int \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a. \u041e\u043d \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0434\u0432\u0435 \u043a\u043e\u043b\u043e\u043d\u043a\u0438, \u043f\u0435\u0440\u0432\u0430\u044f \u043a\u043e\u043b\u043e\u043d\u043a\u0430 \u2013 \u044d\u0442\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e, \u0430 \u0432\u0442\u043e\u0440\u0430\u044f \u2013 \u0438\u043d\u0434\u0435\u043a\u0441 \u043c\u0430\u0441\u0441\u0438\u0432\u0430, \u0433\u0434\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435. \u0412 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u0434\u0432\u0430 \u043c\u0435\u0442\u043e\u0434\u0430, \u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 14.<br \/>  \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 5 int. \u041f\u0435\u0440\u0432\u044b\u0439 \u2013 \u044d\u0442\u043e \u0438\u043c\u044f, \u0438\u043d\u0434\u0435\u043a\u0441 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0441\u0442\u0440\u043e\u043a (\u043c\u044b \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0435\u0451 \u043f\u043e\u0437\u0434\u043d\u0435\u0435). \u0412\u0442\u043e\u0440\u043e\u0435 \u0446\u0435\u043b\u043e\u0435 \u2013 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u0432\u0441\u043b\u0435\u0434 \u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0438\u0434\u0451\u0442 \u0438\u043d\u0434\u0435\u043a\u0441, \u0433\u0434\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0439\u0442\u0438 \u0438\u0445 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435. \u0421\u0435\u0439\u0447\u0430\u0441 \u043c\u044b \u0431\u0443\u0434\u0435\u0442 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u0433 \u0438 \u0444\u043b\u0430\u0433\u0438. \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <b>MOC<\/b> \u0442\u0430\u043a\u0436\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0432\u043e\u0437\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0439 \u0442\u0438\u043f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430, \u0438\u0445 \u0442\u0438\u043f \u0438 \u0438\u043d\u0434\u0435\u043a\u0441 \u0438\u043c\u0435\u043d\u0438.<\/p>\n<h5>\u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u0441\u0442\u0440\u043e\u043a<\/h5>\n<p>  <\/p>\n<pre><code class=\"cpp\">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)     },     &quot;&quot;Counter\\0valueChanged\\0\\0newValue\\0setValue\\0&quot;&quot;     &quot;&quot;value\\0&quot;&quot; }; #undef QT_MOC_LITERAL <\/code><\/pre>\n<p>  \u0412 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c, \u044d\u0442\u043e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 QByteArray (\u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u043c <b>QT_MOC_LITERAL<\/b>), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 \u043d\u0438\u0436\u0435.<\/p>\n<h5>\u0421\u0438\u0433\u043d\u0430\u043b\u044b<\/h5>\n<p>  <b>MOC<\/b> \u0442\u0430\u043a\u0436\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0441\u0438\u0433\u043d\u0430\u043b\u044b. \u041e\u043d\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u044e\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 \u043d\u0430 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442 \u0438\u0445 <i>QMetaObject::activate<\/i>. \u041f\u0435\u0440\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u044d\u0442\u043e \u0432\u043e\u0437\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u0412 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u044d\u0442\u043e 0, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432\u043e\u0437\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 void. \u0422\u0440\u0435\u0442\u0438\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442, \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438, \u044d\u0442\u043e \u0438\u043d\u0434\u0435\u043a\u0441 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 (0 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435).<\/p>\n<pre><code class=\"cpp\">\/\/ SIGNAL 0 void Counter::valueChanged(int _t1) {     void *_a[] = { 0, const_cast&lt;void*&gt;(reinterpret_cast&lt;const void*&gt;(&_t1)) };     QMetaObject::activate(this, &staticMetaObject, 0, _a); } <\/code><\/pre>\n<p>  <\/p>\n<h5>\u0412\u044b\u0437\u043e\u0432 \u0441\u043b\u043e\u0442\u0430<\/h5>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0441\u043b\u043e\u0442 \u043f\u043e \u0435\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044e qt_static_metacall:<\/p>\n<pre><code class=\"cpp\">void Counter::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) {     if (_c == QMetaObject::InvokeMetaMethod) {         Counter *_t = static_cast&lt;Counter *&gt;(_o);         switch (_id) {         case 0: _t-&gt;valueChanged((*reinterpret_cast&lt; int(*)&gt;(_a[1]))); break;         case 1: _t-&gt;setValue((*reinterpret_cast&lt; int(*)&gt;(_a[1]))); break;         default: ;         }         ...     }     ... } <\/code><\/pre>\n<p>  \u041c\u0430\u0441\u0441\u0438\u0432 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 \u043d\u0430 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0432 \u0442\u0430\u043a\u043e\u043c \u0436\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u0435, \u043a\u0430\u043a \u0438 \u0432 \u0441\u0438\u0433\u043d\u0430\u043b\u0430\u0445. _a[0] \u043d\u0435 \u0442\u0440\u043e\u043d\u0443\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432\u0435\u0437\u0434\u0435 \u0442\u0443\u0442 \u0432\u043e\u0437\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f void.<\/p>\n<h5>\u041f\u0440\u0438\u043c\u0435\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u043f\u043e\u0432\u043e\u0434\u0443 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432<\/h5>\n<p>  \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e <b>QMetaObject<\/b>, \u0441\u0438\u0433\u043d\u0430\u043b\u0430\u043c, \u0441\u043b\u043e\u0442\u0430\u043c \u0438 \u043f\u0440\u043e\u0447\u0438\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u043c \u043c\u0435\u0442\u043e\u0434\u0430\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u0434\u0430\u044e\u0442\u0441\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u044b, \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u0441 0. \u041e\u043d\u0438 \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u044b \u0442\u0430\u043a, \u0447\u0442\u043e \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044b, \u0437\u0430\u0442\u0435\u043c \u0441\u043b\u043e\u0442\u044b \u0438 \u0437\u0430\u0442\u0435\u043c \u0443\u0436\u0435 \u043f\u0440\u043e\u0447\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b. \u042d\u0442\u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0432\u043d\u0443\u0442\u0440\u0438 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c\u0438. \u041e\u043d\u0438 \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0442 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u0439. \u041d\u043e \u0432 \u043e\u0431\u0449\u0435\u043c, \u043c\u044b \u043d\u0435 \u0445\u043e\u0442\u0438\u043c \u0437\u043d\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c\u0443 \u043a\u043b\u0430\u0441\u0441\u0443, \u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432\u0441\u0435 \u043f\u0440\u043e\u0447\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0432 \u0446\u0435\u043f\u043e\u0447\u043a\u0435 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043a \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c\u0443 \u0438\u043d\u0434\u0435\u043a\u0441\u0443 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441. \u042d\u0442\u043e\u0442 \u0438\u043d\u0434\u0435\u043a\u0441, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u0432 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u043c API, \u0432\u043e\u0437\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 \u0432\u0438\u0434\u0430 QMetaObject::indexOf{Signal,Slot,Method}.<\/p>\n<p>  \u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043c\u0430\u0441\u0441\u0438\u0432, \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0434\u043b\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432. \u041d\u043e \u0432\u0441\u0435 \u0441\u043b\u043e\u0442\u044b \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 \u043c\u0435\u0441\u0442\u043e \u0432 \u044d\u0442\u043e\u043c \u043c\u0430\u0441\u0441\u0438\u0432\u0435 \u0438 \u043e\u0431\u044b\u0447\u043d\u043e \u0441\u043b\u043e\u0442\u043e\u0432 \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u043c \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432. \u0422\u0430\u043a \u0447\u0442\u043e, \u0441 Qt 4.6, \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \u0434\u043b\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u044b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0434\u043b\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432. \u0415\u0441\u043b\u0438 \u0432\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0435 \u0441 Qt, \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \u0434\u043b\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u0432. \u041d\u043e \u043f\u043e\u043a\u0430 \u0432\u044b \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 <b>QObject<\/b>, \u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0437\u043d\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u0438\u0446\u0443 \u043c\u0435\u0436\u0434\u0443 \u044d\u0442\u0438\u043c\u0438 \u0442\u0440\u0435\u043c\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c\u0438.<\/p>\n<h5>\u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435<\/h5>\n<p>  \u041f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 Qt \u043f\u0440\u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0438, \u044d\u0442\u043e \u0438\u0449\u0435\u0442 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0438 \u0441\u043b\u043e\u0442\u0430. Qt \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441\u0442\u0440\u043e\u043a \u043c\u0435\u0442\u0430\u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0432 \u043f\u043e\u0438\u0441\u043a\u0430\u0445 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432. \u0417\u0430\u0442\u0435\u043c, \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0438 \u043e\u0431\u044a\u0435\u043a\u0442 QObjectPrivate::Connection.<\/p>\n<p>  \u041a\u0430\u043a\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f? \u041d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u0441\u043f\u043e\u0441\u043e\u0431 \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044e \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u0430. \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u043e\u0442\u043e\u0432, \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0451\u043d\u043d\u044b\u0445 \u043a \u043e\u0434\u043d\u043e\u043c\u0443 \u0438 \u0442\u043e\u043c\u0443 \u0436\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u0443, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0438\u043c\u0435\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0451\u043d\u043d\u044b\u0445 \u0441\u043b\u043e\u0442\u043e\u0432. \u041a\u0430\u0436\u0434\u043e\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442-\u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044c \u0438 \u0438\u043d\u0434\u0435\u043a\u0441 \u0441\u043b\u043e\u0442\u0430. \u041c\u044b \u0442\u0430\u043a\u0436\u0435 \u0445\u043e\u0442\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0443\u0434\u0430\u043b\u044f\u043b\u0438\u0441\u044c, \u043f\u0440\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u0430\u0436\u0434\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442-\u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044c \u0434\u043e\u043b\u0436\u0435\u043d \u0437\u043d\u0430\u0442\u044c, \u043a\u0442\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0451\u043d \u0441 \u043d\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043c\u043e\u0433 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435.<\/p>\n<p>  \u0412\u043e\u0442 QObjectPrivate::Connection, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0439 \u0432 qobject_p.h:<\/p>\n<pre><code class=\"cpp\">struct QObjectPrivate::Connection {     QObject *sender;     QObject *receiver;     union {         StaticMetaCallFunction callFunction;         QtPrivate::QSlotObjectBase *slotObj;     };     \/\/ \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043e\u0434\u043d\u043e\u0441\u0432\u044f\u0437\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a ConnectionList     Connection *nextConnectionList;     \/\/ \u0441\u0432\u044f\u0437\u043d\u044b\u0435 \u0441\u043f\u0438\u0441\u043a\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u0435\u0439     Connection *next;     Connection **prev;     QAtomicPointer&lt;const int&gt; argumentTypes;     QAtomicInt ref_;     ushort method_offset;     ushort method_relative;     uint signal_index : 27; \/\/ \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 (\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 QObjectPrivate::signalIndex())     ushort connectionType : 3; \/\/ 0 == auto, 1 == direct, 2 == queued, 4 == blocking     ushort isSlotObject : 1;     ushort ownArgumentTypes : 1;     Connection() : nextConnectionList(0), ref_(2), ownArgumentTypes(true) {         \/\/ ref_ 2 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u0441\u043f\u0438\u0441\u043a\u0430\u0445 \u0438 \u0432 QMetaObject::Connection     }     ~Connection();     int method() const { return method_offset + method_relative; }     void ref() { ref_.ref(); }     void deref() {         if (!ref_.deref()) {             Q_ASSERT(!receiver);             delete this;         }     } }; <\/code><\/pre>\n<p>  \u041a\u0430\u0436\u0434\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0438\u043c\u0435\u0435\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439: \u044d\u0442\u043e \u043c\u0430\u0441\u0441\u0438\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u0442 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0441\u043f\u0438\u0441\u043a\u0438 QObjectPrivate::Connection. \u041a\u0430\u0436\u0434\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0442\u0430\u043a\u0436\u0435 \u0438\u043c\u0435\u0435\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0435 \u0441\u043f\u0438\u0441\u043a\u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f. \u042d\u0442\u043e \u0434\u0432\u0443\u0441\u0432\u044f\u0437\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a.<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/0ab\/6de\/c98\/0ab6dec98c237b788b7ea2e97d2e99fc.png\"\/><br \/>  \u0421\u0432\u044f\u0437\u043d\u044b\u0435 \u0441\u043f\u0438\u0441\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432. \u041e\u043d\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0441 \u043d\u0430\u043b\u0438\u0447\u0438\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439\/\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0443\u0437\u0435\u043b \u0432\u043d\u0443\u0442\u0440\u0438 QObjectPrivate::Connection. \u0417\u0430\u043c\u0435\u0442\u044c\u0442\u0435, \u0447\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c prev \u0438\u0437 senderList \u044d\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c. \u042d\u0442\u043e \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0443\u0437\u0435\u043b, \u0430, \u0441\u043a\u043e\u0440\u0435\u0435, \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439, \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u0443\u0437\u043b\u0435. \u042d\u0442\u043e\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0433\u0434\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u0440\u0443\u0448\u0430\u0435\u0442\u0441\u044f. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0435 \u0438\u043c\u0435\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430.<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/7fd\/fc7\/d78\/7fdfc7d785c3b39d6764b4f152d0c4fa.png\"\/>  <\/p>\n<h5>\u042d\u043c\u0438\u0441\u0441\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u0430<\/h5>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0441\u0438\u0433\u043d\u0430\u043b, \u043c\u044b \u0432\u0438\u0434\u0435\u043b\u0438, \u0447\u0442\u043e \u043e\u043d \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u0434, \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 <b>MOC<\/b>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0436\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 <i>QMetaObject::activate<\/i>. \u0412\u043e\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f (\u0441 \u043f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u044f\u043c\u0438) \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u0432 qobject.cpp:<\/p>\n<pre><code class=\"cpp\">void QMetaObject::activate(QObject *sender, const QMetaObject *m, int local_signal_index,                            void **argv) {     \/* \u0442\u0443\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0434\u0432\u0438\u0433\u0430\u0435\u043c\u0441\u044f \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u044f \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043c\u0435\u0442\u0430\u043e\u0431\u044a\u0435\u043a\u0442\u0430 *\/     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;     \/* \u0431\u044b\u0441\u0442\u0440\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0431\u0438\u0442\u043e\u0432\u043e\u0439 \u043c\u0430\u0441\u043a\u0438 \u0438\u0437 64 \u0431\u0438\u0442, \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 0, \u043c\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u043e \u0441 \u044d\u0442\u0438\u043c \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u043c \u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0431\u044b\u0441\u0442\u0440\u043e \u0432\u044b\u0439\u0442\u0438, \u0447\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u044d\u043c\u0438\u0441\u0441\u0438\u044e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0431\u0435\u0437 \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0451\u043d\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0442\u0430 \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u043e\u0439 *\/     if (!sender-&gt;d_func()-&gt;isSignalConnected(signal_index))         return; \/\/ \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u043e \u0441 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u043c      \/* \u2026 \u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d\u044b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0435 \u0438 QML \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0447\u0438\u043a\u0438,  \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 ... *\/      \/* \u0437\u0430\u0445\u0432\u0430\u0442 \u043c\u044c\u044e\u0442\u0435\u043a\u0441\u0430, \u0442\u0430\u043a \u043a\u0430\u043a \u0432\u0441\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0432 connectionLists \u043f\u043e\u0442\u043e\u043a\u043e\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b *\/     QMutexLocker locker(signalSlotLock(sender));      \/* \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 connectionList \u0438\u0437 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 (\u0443\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f) *\/     QObjectConnectionListVector *connectionLists = sender-&gt;d_func()-&gt;connectionLists;     const QObjectPrivate::ConnectionList *list =         &connectionLists-&gt;at(signal_index);      QObjectPrivate::Connection *c = list-&gt;first;     if (!c) continue;      \/\/ \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c last, \u0447\u0442\u043e\u0431\u044b \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u0438\u0442\u0441\u044f, \u0447\u0442\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u044d\u043c\u0438\u0441\u0441\u0438\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u0430, \u043d\u0435 \u0431\u044b\u043b\u0438 \u0432\u044b\u0437\u0432\u0430\u043d\u044b     QObjectPrivate::Connection *last = list-&gt;last;      \/* \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438, \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u043b\u043e\u0442\u0430 *\/     do {         if (!c-&gt;receiver)             continue;          QObject * const receiver = c-&gt;receiver;         const bool receiverInSameThread = QThread::currentThreadId() == receiver-&gt;d_func()-&gt;threadData-&gt;threadId;          \/\/ \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e, \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u043c \u0435\u0433\u043e \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u0439         if ((c-&gt;connectionType == Qt::AutoConnection && !receiverInSameThread)             || (c-&gt;connectionType == Qt::QueuedConnection)) {              \/* \u0431\u0430\u0437\u043e\u0432\u043e\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f *\/             queued_activate(sender, signal_index, c, argv);             continue;         } else if (c-&gt;connectionType == Qt::BlockingQueuedConnection) {             \/* ... \u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d\u043e ... *\/             continue;         }          \/* \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 sender() \u0438 \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u043a\u0438\u0434\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 *\/         QConnectionSenderSwitcher sw;         if (receiverInSameThread)             sw.switchSender(receiver, sender, signal_index);          const QObjectPrivate::StaticMetaCallFunction callFunction = c-&gt;callFunction;         const int method_relative = c-&gt;method_relative;         if (c-&gt;isSlotObject) {             \/* \u2026 \u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d\u043e \u2026 \u0441\u0442\u0438\u043b\u044c Qt5 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044e ... *\/         } else if (callFunction && c-&gt;method_offset &lt;= receiver-&gt;metaObject()-&gt;methodOffset()) {             \/* \u0435\u0441\u043b\u0438 \u043c\u044b \u0438\u043c\u0435\u0435\u043c callFunction (\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 qt_static_metacall, \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 MOC), \u043c\u044b \u0435\u0451 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c *\/             \/* \u0442\u0430\u043a\u0436\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430, \u0447\u0442\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u0439 metodOffset \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 (\u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0438\u0437 \u0434\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430) *\/             locker.unlock(); \/\/ \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u0437\u043e\u0432\u0430 \u043c\u0435\u0442\u043e\u0434\u0430             callFunction(receiver, QMetaObject::InvokeMetaMethod, method_relative, argv);             locker.relock();         } else {             \/* \u043e\u0431\u0445\u043e\u0434\u043d\u043e\u0439 \u043f\u0443\u0442\u044c \u0434\u043b\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 *\/             const int method = method_relative + c-&gt;method_offset;             locker.unlock();             metacall(receiver, QMetaObject::InvokeMetaMethod, method, argv);             locker.relock();         }          \/\/ \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430, \u0447\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442 \u043d\u0435 \u0431\u044b\u043b \u0443\u0434\u0430\u043b\u0451\u043d \u0447\u0435\u0440\u0435\u0437 \u0441\u043b\u043e\u0442         if (connectionLists-&gt;orphaned) break;     } while (c != last && (c = c-&gt;nextConnectionList) != 0); } <\/code><\/pre>\n<p>  <i>\u041e\u0442 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a\u0430: \u044d\u0442\u043e \u0431\u044b\u043b\u0430 \u043f\u0435\u0440\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0438 \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u043c \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 \u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 <a href=\"http:\/\/woboq.com\/blog\/how-qt-signals-slots-work-part2-qt5.html\">\u0432\u0442\u043e\u0440\u043e\u0439<\/a> \u0447\u0430\u0441\u0442\u0438.<\/i>   \t<\/p>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/214379\/\"> http:\/\/habrahabr.ru\/post\/214379\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">       <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/f24\/054\/8b6\/f240548b6171eda32a27b5ffde6e5483.png\"\/><br \/>  Qt \u0445\u043e\u0440\u043e\u0448\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d \u0441\u0432\u043e\u0438\u043c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u043c \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0438 \u0441\u043b\u043e\u0442\u043e\u0432. \u041d\u043e \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442? \u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u043c\u044b \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u0435\u043c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u0438 <b>QObject<\/b> \u0438 <b>QMetaObject<\/b> \u0438 \u0440\u0430\u0441\u043a\u0440\u043e\u0435\u043c \u0438\u0445 \u0440\u0430\u0431\u043e\u0442\u0443 \u0437\u0430 \u043a\u0430\u0434\u0440\u043e\u043c. \u042f \u0431\u0443\u0434\u0443 \u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u044b Qt5 \u043a\u043e\u0434\u0430, \u0438\u043d\u043e\u0433\u0434\u0430 \u043e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u043a\u0440\u0430\u0442\u043a\u043e\u0441\u0442\u0438 \u0438 \u0441 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-214379","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/214379","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=214379"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/214379\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=214379"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=214379"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=214379"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}