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"; }
рдпрд╣ рдмрдврд╝рд╛рд╡рд╛ рдпрд╛ 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());
рдЗрд╕рд╕реЗ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред