Qt5 рдореЗрдВ рд╕рд┐рдЧреНрдирд▓ рдФрд░ рд╕реНрд▓реЙрдЯ

Qt5 рдЕрд▓реНрдлрд╛ рдиреЗ рдкреНрд░рдХрд╛рд╢ рдХреЛ рджреЗрдЦрд╛ред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЙрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛, рдЬрд┐рди рдкрд░ рдореИрдВрдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдерд╛ - рдпрд╣ рд╕рд┐рдЧреНрдирд▓ рдФрд░ рд╕реНрд▓реЙрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИред

рдкрд┐рдЫрд▓рд╛ рд╡рд╛рдХреНрдп-рд╡рд┐рдиреНрдпрд╛рд╕


рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рд╣рдо рд╕рд┐рдЧреНрдирд▓ рдФрд░ рд╕реНрд▓реЙрдЯ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ:

connect(sender, SIGNAL(valueChanged(QString,QString)), receiver, SLOT(updateValue(QString)) ); 

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, SIGNAL рдФрд░ SLOT рдореИрдХреНрд░реЛрдЬрд╝ рдиреЗ рдЕрдкрдиреЗ рддрд░реНрдХреЛрдВ рдХреЛ рддрд╛рд░ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ред рдлрд┐рд░ QObject::connect() рдЗрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рддреБрд▓рдирд╛ moc рдпреВрдЯрд┐рд▓рд┐рдЯреА рджреНрд╡рд╛рд░рд╛ рд╕рдВрдХрд▓рд┐рдд рдЖрддреНрдордирд┐рд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рд╕реЗ рдХрд░рддрд╛ рд╣реИред

рдЗрд╕ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдореЗрдВ рдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рд╣реИ?

рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рд╕рдм рдХреБрдЫ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЕрднреА рднреА рдХреБрдЫ рдЕрд╕реБрд╡рд┐рдзрд╛рдПрдВ рд╣реИрдВ:


рдирдпрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕: рдлрд╝рдВрдХреНрд╢рди рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


рдЖрдЧрд╛рдореА Qt5 рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЙрдкрд░реЛрдХреНрдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рд╕рд┐рдЧреНрдирд▓ рдФрд░ рд╕реНрд▓реЙрдЯ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдЗрд╕ рдирдП рддрд░реАрдХреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 connect(sender, &Sender::valueChanged, receiver, &Receiver::updateValue ); 

рдЬреЛ рдЕрдзрд┐рдХ рд╕реБрдВрджрд░ рд╣реИ рд╡рд╣ рд╕реНрд╡рд╛рдж рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИред рд▓реЗрдХрд┐рди рдирдП рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред

рдЕрдм рдЙрди рд▓рд╛рднреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬреЛ рдпрд╣ рджреЗрддрд╛ рд╣реИ:

рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдЬрд╛рдВрдЪреЗрдВ

рдпрджрд┐ рдЖрдк рд╕рд┐рдЧреНрдирд▓ рдпрд╛ рд╕реНрд▓реЙрдЯ рдХреЗ рдирд╛рдо рдкрд░ рдЧрд▓рддреА рдХрд░рддреЗ рд╣реИрдВ, рдпрд╛ рдпрджрд┐ рд╕реНрд▓реЙрдЯ рдХреЗ рддрд░реНрдХ рд╕рд┐рдЧреНрдирд▓ рдХреЗ рддрд░реНрдХреЛрдВ рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдПрдХ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рдорд┐рд▓реЗрдЧреАред рдпрд╣ рдЖрдкрдХреЛ рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреЗ рдмрд╛рдж рдХрд╛ рд╕рдордп рдмрдЪрд╛рдПрдЧрд╛ред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, static_assert рдЙрдкрдпреЛрдЧ рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ static_assert рдЬрд╣рд╛рдВ рддрд░реНрдХ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреЗ рдпрд╛ Q_OBJECT рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рддрд░реНрдХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд╛рд╕реНрдЯрд┐рдВрдЧ

рдЕрдм рдЖрдк рди рдХреЗрд╡рд▓ рдЯрд╛рдЗрдк рдХрд┐рдПрдб рдпрд╛ рдирд╛рдорд╕реНрдерд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдбрд░ тАЛтАЛрд╕рдХрддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдЙрди рд╕рдВрдХреЗрддреЛрдВ рдХреЛ рднреА рдХрдиреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рддрд░реНрдХреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдпрджрд┐ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рд╕рдВрднрд╡ рд╣реИред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдПрдХ рд╕рдВрдХреЗрдд рдХреЛ QVariant рдЬреЛ QVariant рдХреЛ рдПрдХ рд╕реНрд▓реЙрдЯ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдПрдХ QVariant рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ QVariant рдХрд╛ рдПрдХ рдирд┐рд╣рд┐рдд рдирд┐рд░реНрдорд╛рддрд╛ рд╣реИ рдЬреЛ QVariant рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред

 class Test : public QObject { Q_OBJECT public: Test() { connect(this, &Test::someSignal, this, &Test::someSlot); } signals: void someSignal(const QString &); public: void someSlot(const QVariant &); }; 

рд╣рдо рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рд┐рдЧреНрдирд▓ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, someSlot рдХреЛ рдмрд┐рдирд╛ slot рдмрд╕ рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд┐рдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред Qt рд╕реАрдзреЗ рд╕реНрд▓реЙрдЯ рдХрд╣ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрд╕реЗ рдЖрддреНрдордирд┐рд░реАрдХреНрд╖рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЕрднреА рднреА рд╕рдВрдХреЗрддреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ)

рд▓реЗрдХрд┐рди рдЕрдм рд╣рдо рдХрд┐рд╕реА рднреА рдлрдВрдХреНрд╢рди рдпрд╛ рдлрдирдХрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдЗрдирд▓ рдХрдиреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 static void someFunction() { qDebug() << "pressed"; } // ... somewhere else QObject::connect(button, &QPushButton::clicked, someFunction); 

рдпрд╣ рдмрдврд╝рд╛рд╡рд╛ рдпрд╛ tr1 :: рдмрд╛рдЗрдВрдб рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдмрди рд╕рдХрддрд╛ рд╣реИред

C ++ 11 рд╕реЗ рдмреЗрдирд╛рдореА рдлрд╝рдВрдХреНрд╢рди

рдкрд╣рд▓реЗ рд╡рд░реНрдгрд┐рдд рд╕рдм рдХреБрдЫ рдкреБрд░рд╛рдиреЗ C ++ 98 рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк C ++ 11 рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрдВрдкрд╛рдЗрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдирдИ рднрд╛рд╖рд╛ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрддреНрдпрдзрд┐рдХ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВред рд▓реИрдВрдмрдбрд╛ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХрдо рд╕реЗ рдХрдо MSVC 2010, GCC 4.5, рдХреНрд▓реИрдВрдЧ 3.1 рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВред рдЕрдВрддрд┐рдо рджреЛ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдзреНрд╡рдЬ рдХреЗ рд░реВрдк рдореЗрдВ -std=c++0x рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдЕрдм рдЖрдк рдЗрд╕ рдХреЛрдб рдХреЛ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:

 void MyWindow::saveDocumentAs() { QFileDialog *dlg = new QFileDialog(); dlg->open(); QObject::connect(dlg, &QDialog::finished, [=](int result) { if (result) { QFile file(dlg->selectedFiles().first()); // ... save document here ... } dlg->deleteLater(); }); } 

рдЗрд╕рд╕реЗ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

Source: https://habr.com/ru/post/In141983/


All Articles