рд╕рд░рд▓ рдлрд╝рдВрдХреНрд╢рди рдФрд░ рд▓рдВрдмреЛ рдХреЗ рд╕рд╛рде рдХреНрдпреВрдЯреА рд╕рд┐рдЧреНрдирд▓ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ

Qt4 рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рднреЗрдЬреЗ рдЧрдП рд╕рд┐рдЧреНрдирд▓ рдХреЛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЬреБрдиреВрдиреА рдЗрдЪреНрдЫрд╛ рдереА рдЬреЛ рдПрдХ рд╕реНрд▓реЙрдЯ рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╡рд░реНрдЧ рдХрд╛ рд╕рджрд╕реНрдп рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдкреВрд░рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдЖрдорддреМрд░ рдкрд░ рд╣реЛрддрд╛ рд╣реИ), рдФрд░ рдЙрди рд╕рднреА рдХреЛ QObject рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ, рддреЛ рдПрдХ рд╕реНрд▓реЙрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЬрд╣рд╛рдВ рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред рдФрд░ рдЕрдЧрд░ рдирд╣реАрдВ? рдпрджрд┐ рдЖрдк, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрдореЛрд░реА рд╕реЗрд╡рд┐рдВрдЧ (рдпрд╛ рдЕрдиреНрдп рдХрд╛рд░рдгреЛрдВ рд╕реЗ) рдХреЗ рдХрд╛рд░рдг QObject рд╕реЗ рдЕрдкрдиреА рдХреНрд▓рд╛рд╕ рдЗрдирд╣реЗрд░рд┐рдЯ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдпрд╛ рдХреНрдпрд╛ рд╕реНрд▓реЙрдЯ рдПрдХреНрд╢рди рдореЗрдВ рдХреЗрд╡рд▓ 1 рд▓рд╛рдЗрди рд▓рдЧрддреА рд╣реИ рдФрд░ рдЗрд╕реЗ рд▓рдВрдмреЛрджрд░ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрдирд╛ рдЬреНрдпрд╛рджрд╛ рдЖрд╕рд╛рди рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛? рдпрд╛ рдХреНрдпрд╛ рдЖрдк рдХрд┐рд╕реА рдПрдХрд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐рд╕реА рд╡рд░реНрдЧ рдХрд╛ рд╕рджрд╕реНрдп рдирд╣реАрдВ рд╣реИ?

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рдПрдХ рд╡рд░реНрдЧ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬреЛ рд╣рдореЗрдВ рд╕рд┐рдЧреНрдирд▓ рдХреЛ рди рдХреЗрд╡рд▓ рдлрд╝рдВрдХреНрд╢рди рд╕реНрд▓реЙрдЯ рдХреЗ рд╕рд╛рде, рдмрд▓реНрдХрд┐ рд╕рдмрд╕реЗ рд╕рд╛рдзрд╛рд░рдг рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде, рдФрд░ C ++ 11 рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде, рдПрдХ рд▓рдВрдмреЛрджрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рд╕реНрдорд╛рд░реНрдЯрдХрдиреЗрдХреНрдЯ рдХреНрд▓рд╛рд╕ рд▓рд┐рдЦрдирд╛


рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡рд░реНрдЧ рдХреЛ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдпрд╣ QObject рд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╣рдорд╛рд░реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рд╕реНрдЯреЛрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╛рдиреА рд╣рдо рдХреБрдЫ SmartConnect рд╕реНрд▓реЙрдЯ рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╡рд░реНрдЧ рдХреЗ рд╕рд┐рдЧреНрдирд▓ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА SmartConnect рд╣рдорд╛рд░реЗ рд╕реНрд╡рддрдВрддреНрд░ рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рд▓реИрдореНрдмреНрдбрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдЕрдкрдиреЗ рд╕реНрд▓реЙрдЯ рдкрд░ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред

рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╕рдорд╛рдзрд╛рди рд╕реНрдорд╛рд░реНрдЯрдХрдиреЗрдХреНрдЯ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рдУрд╡рд░рд▓реЛрдб рдХрд░рдирд╛ рд╣реИ - рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рд▓рд┐рдВрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЗрд╕реЗ рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрдХреЗрддреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░реЗрдВ - рдЬреЛ рдХрд┐ рддрд░реНрдХ рдореЗрдВ рд╢реВрдиреНрдп рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рд╡реЗ рдЬреЛ QString рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВред рдПрдХ Smartconnect.h рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:
# рдХрд┐рдВрдХрд░реНрддрд╡реНрдпрд╡рд┐рдореВрдврд╝ <QtCore>

рд╡рд░реНрдЧ рд╕реНрдорд╛рд░реНрдЯрдХрдиреЗрдХреНрдЯ : рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ QObject
{
Q_OBJECT
void ( * pVoidFunc ) ( рд╢реВрдиреНрдп ) ;
рд╢реВрдиреНрдп ( * pQStringFunc ) ( QString ) ;
рдЬрдирддрд╛ :
SmartConnect ( QObject * рдкреНрд░реЗрд╖рдХ , рдХрд╛рд╕реНрдЯ рдЪрд╛рд░ * рд╕рдВрдХреЗрдд , рд╢реВрдиреНрдп ( * pFunc ) ( рд╢реВрдиреНрдп ) ) ;
SmartConnect ( QObject * рдкреНрд░реЗрд╖рдХ , рдХрд╛рд╕реНрдЯ рдЪрд╛рд░ * рд╕рдВрдХреЗрдд , рд╢реВрдиреНрдп ( * pFunc ) ( QString ) ) ;
рдирд┐рдЬреА рд╕реНрд▓реЙрдЯ :
рд╢реВрдиреНрдп voidSlot ( ) ;
рд╢реВрдиреНрдп QStringSlot ( QString str ) ;
} ;

рддрдм - рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ smartconnect.cpp:
# рдХрд┐рдВрдХрд░реНрддрд╡реНрдпрд╡рд┐рдореВрдврд╝ <QtCore>
#include "smartconnect.h"

SmartConnect :: SmartConnect ( QObject * рдкреНрд░реЗрд╖рдХ , рдХрд╛рд╕реНрдЯ рдЪрд╛рд░ * рд╕рдВрдХреЗрдд , рд╢реВрдиреНрдп ( * pFunc ) ( ) ) {
pVoidFunc = pFunc ;
QObject :: рдХрдиреЗрдХреНрдЯ ( рдкреНрд░реЗрд╖рдХ , рд╕рдВрдХреЗрдд , рдпрд╣ , SLOT ( voidSlot ( ) ) ) ;
}

SmartConnect :: SmartConnect ( QObject * рдкреНрд░реЗрд╖рдХ , рдХрд╛рд╕реНрдЯ рдЪрд╛рд░ * рд╕рдВрдХреЗрдд , рд╢реВрдиреНрдп ( * pFunc ) ( QString ) ) {
pQStringFunc = pFunc ;
QObject :: рдХрдиреЗрдХреНрдЯ ( рдкреНрд░реЗрд╖рдХ , рд╕рдВрдХреЗрдд , рдпрд╣ , SLOT ( QStringSlot ( QString ) ) ) ;
}

рд╢реВрдиреНрдп рд╕реНрдорд╛рд░реНрдЯрдХрдиреЗрдХреНрдЯ :: voidSlot ( ) {
pVoidFunc ( ) ;
}

рд╢реВрдиреНрдп рд╕реНрдорд╛рд░реНрдЯрдХрдиреЗрдХреНрдЯ :: QStringSlot ( QString str ) {
pQStringFunc ( str ) ;
}

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд░реНрдЧ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрдорд╛рд░реНрдЯ рд╣реИ - рдирд╛рдордХ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдпрд╣ рд╡рд╛рдВрдЫрд┐рдд рдЖрдВрддрд░рд┐рдХ рд╕реНрд▓реЙрдЯ рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдФрд░ рд╣рдорд╛рд░реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдВрдХ рдХреЛ рднреА рдмрдЪрд╛рддрд╛ рд╣реИред рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рд╣рдо рдХрд┐рд╕реА рднреА рддрд░реНрдХ рдХреЗ рд╕рд╛рде рд╕рдВрдХреЗрддреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдмрд╕ рдЗрди рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝реЗрдВ, рдЬреЛ рд╕реНрд▓реЙрдЯ рдЙрдиреНрд╣реЗрдВ рдФрд░ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдмрд╛рд╣рд░реА рд░реВрдк рд╕реЗ рдХрдХреНрд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЙрддрдирд╛ рд╣реА рд╕рд░рд▓ рд╣реЛрдЧрд╛ред

рдбреЗрдореЛ рд▓рд┐рдЦрдирд╛


рдЕрдм main.cpp рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:
# рдЕрд▓рдЧ <QtGui>
#include "smartconnect.h"

рд╢реВрдиреНрдп рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ ( ) {
qDebug ( ) << "рд╢реВрдиреНрдп рд╕реЗ рд╣реИрд▓реЛ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ ()" ;
}

int main ( int argc , char * argv [ ] ) {
QApplication app ( argc , argv ) ;

QPushButton рдмрдЯрди 1 ( "рдмрдЯрди 1" ) ;
Button1ред рд╢реЛ ( ) ;
SmartConnect smartConnect1 ( & button1 , SIGNAL ( рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рд╣реБрдЖ ) ( ) , onClick ) ;

QPushButton рдмрдЯрди 2 ( "рдмрдЯрди 2" ) ;
SmartConnect smartConnect2 ( & button2 , SIGNAL ( рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рд╣реБрдЖ ) ( ) , [ ] ( ) { qDebug ( ) << "рдирдорд╕реНрдХрд╛рд░ рд╕реЗ рдирдорд╕реНрдХрд╛рд░" ; } ) ;
Button2ред рд╢реЛ ( ) ;

рд╡рд╛рдкрд╕реА рдПрдкреНрд▓рд┐рдХреЗрд╢рдиред рдирд┐рд╖реНрдкрд╛рджрди ( ) ;
}

рдпрд╣рд╛рдВ рд╣рдо 2 рдмрдЯрди рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрдХ рдиреЙрди-рд╕реНрд▓реЙрдЯ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ - рд▓реИрдореНрдмреНрдбрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП - рдФрд░ рдЬрдм рдЖрдк рдЙрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдЕрдм C ++ 11 рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛, рдПрдХ рдкреНрд░реЛ-рдлрд╛рдЗрд▓ рдмрдирд╛рддреЗ рд╣реИрдВред рдореБрдЭреЗ рддреБрд░рдВрдд рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рдХреНрдпреВрдЯреА рдХреЗ рдПрдХ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЬреЛ рдЙрд╕реА рд╕рдВрдХрд▓рдХ рдХреЗ рдиреАрдЪреЗ рдЗрдХрдЯреНрдареЗ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рд╕реА ++ 11 рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВред рдЕрдиреНрдпрдерд╛, рд▓реИрдореНрдмреНрдбрд╛ рдЙрджрд╛рд╣рд░рдг рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред Main.pro рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:
рдХреНрдпреВрдЯреА + = рдЧреБрдИ
рдРрдк = рдРрдк
CONFIG + = рд░рд┐рд▓реАрдЬрд╝
рд╕реНрд░реЛрдд + = рдореБрдЦреНрдпред рд╕реАрдкреАрдкреА
SmartConnectред рд╕реАрдкреАрдкреА
рд╣реЗрдбрд░реНрд╕ + = рд╕реНрдорд╛рд░реНрдЯрдХрдиреЗрдХреНрдЯред рдЬ
CONFIG + = рдХрдВрд╕реЛрд▓
QMAKE_CXXFLAGS + = - std = gnu ++ 11

рдЕрдВрдд рдореЗрдВ, рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рд╕рдВрдХрд▓рди рдФрд░ рд╕рдВрдХрд▓рди рдХрд░реЗрдВ:
qmake рдореБрдЦреНрдпред рдкреНрд░реЛ - рдУ рдореЗрдХрдлрд╛рдЗрд▓
рдореЗрдХрдЕрдк

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

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


All Articles