Qt рдореЗрдВ рдореЙрдбрд▓-рд╡реНрдпреВ-рдкреНрд░рд╕реНрддреЛрддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛

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



рдПрдорд╡реАрдкреА рдХреА рдХрд╣рд╛рдиреА



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



рдПрдорд╡реАрдкреА рдФрд░ рдПрдорд╡реАрд╕реА рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреНрдпрд╛ рд╣реИ, рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рд╕рдВрдмрдВрдзрд┐рдд рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдкрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ [3]: рдПрдорд╡реАрд╕реА , рдПрдорд╡реАрдкреА



Qt рдореЗрдВ MVP рд▓рд╛рдЧреВ рдХрд░реЗрдВ



рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдПрдорд╡реАрдкреА рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреНрдпреВрдЯреА рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ [4] рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:



рдЫрд╡рд┐



рд▓реЗрдХрд┐рди рдРрд╕реЗ рдПрдорд╡реАрдкреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдХрдИ рдиреБрдХрд╕рд╛рди рд╣реИрдВ:



рдПрдХ рдкреВрд░реНрдг MVP рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:



рдЫрд╡рд┐



рдЗрд╕рд▓рд┐рдП рд╡рд░реНрдЧ рдЖрд░реЗрдЦ:



рдЫрд╡рд┐



рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:



"рдбреНрд░рд╛рдЗрдВрдЧ рд╕реНрдХреНрд╡рд╛рдпрд░" рдХреЗ рдЪрд░рдг рдореЗрдВ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИред рдореБрдЭреЗ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдереАред

  1. IView рд▓рд┐рдЦрддреЗ рд╕рдордп, рдЖрдкрдХреЛ рд╕рдВрдХреЗрддреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП, IView рдХреЛ QObject рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рд▓рд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдлрд┐рд░, рдЬрдм рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ QWidget рдФрд░ IView рд╕реЗ рд╡реНрдпреВ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЧрдИ, рддреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реБрдИред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдХрдХреНрд╖рд╛ рдХреЛ рдПрдХ рд╕рд╛рде рджреЛ QObject рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдирд╣реАрдВ рдорд┐рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╡рд░реНрдЪреБрдЕрд▓ рдЗрдирд╣реЗрд░рд┐рдЯреЗрдВрд╕ рдиреЗ рднреА рдорджрдж рдирд╣реАрдВ рдХреА)ред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдХреИрд╕реЗ рдирд┐рдЬрд╛рдд рдкрд╛рдПрдВ [5]: рд▓рд┐рдВрдХ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, IView QObject рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЦрдВрдб рдореЗрдВ рд╕рдВрдХреЗрддреЛрдВ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЖрднрд╛рд╕реА (рд╕рд╛рд░) рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХрд╛рдлреА рддрд╛рд░реНрдХрд┐рдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рд┐рдЧреНрдирд▓ рднреА рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬрд┐рд╕реЗ рдХреЙрд▓ рдХрд░рдХреЗ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХреЛрдВ рдХреЛ рдЙрдирдХреЗ рд╕реНрд▓реЙрдЯреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реВрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдСрдмреНрдЬрд░реНрд╡рд░ рдкреИрдЯрд░реНрди рджреЗрдЦреЗрдВ)ред
  2. рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рд╡рд░реНрдЧ рдореЗрдВ IVIV рд╕рдВрдХреЗрддреЛрдВ рдХреЛ рдмрд╛рдЗрдВрдб рдХрд░рддреЗ рд╕рдордп рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдЙрддреНрдкрдиреНрди рд╣реБрдИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдореЗрдВ IView рдХрд╛ рд▓рд┐рдВрдХ рд╢рд╛рдорд┐рд▓ рд╣реИ (рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рджреГрд╢реНрдп рд░рди рдЯрд╛рдЗрдо рдореЗрдВ рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди IView рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд - рдмрд╣реБрд░реВрдкрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рд▓реЗрдХрд┐рди рд╕рдВрдХреЗрддреЛрдВ рдФрд░ рд╕реНрд▓реЙрдЯреНрд╕ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрдерд┐рд░ QObject::connect()



    рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХреЗрд╡рд▓ QObject рд╡рдВрд╢рдЬ рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ IView рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рдХреЛрдИ рднреА рджреГрд╢реНрдп рдпрд╣ рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдкрд╛рдВрддрд░рдг рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ [6] рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:



    QObject   * view_obj   =   dynamic_cast < QObject *>( m_view );   //     m_view   -   IView

    QObject :: connect ( view_obj ,   SIGNAL ( okActionTriggered ()),

                      this ,   SLOT ( processOkAction ()));








рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ IVIV рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп, рдХреЗрд╡рд▓ рд╣реЗрдбрд░ (.h) рдлрд╝рд╛рдЗрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрджрд┐ рдЖрдИрд╡реАрдХреНрдпреВ рдХреЗ рд▓рд┐рдП рдПрдХ .cpp рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ, рддреЛ рдЙрд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ рд╕рдВрдХрд▓рди рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред



рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА Qt рдореЗрдВ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдПрдорд╡реАрдкреА рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЙрджрд╛рд╣рд░рдг (рдХреЗрд╡рд▓ рдПрдорд╡реАрдкреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдмрд╛рддрдЪреАрдд рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдП рдмрд┐рдирд╛) рджреВрдВрдЧрд╛ред



Qt рдореЗрдВ MVP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг



рдкреБрд░рд╛рд▓реЗрдЦ рдореЗрдВ 3 рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ, рдпрд╣ рдПрдХ рд╣реА рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рддреНрдпреЗрдХ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдкрд░рд┐рд╡рд░реНрдзрди рдХреЗ рд╕рд╛рдеред

  1. рдПрдорд╡реАрдкреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
  2. рдХрдИ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛
  3. рдЬрдм рдбреЗрдЯрд╛ рдмрджрд▓рддрд╛ рд╣реИ рддреЛ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рдмреАрдЪ рдкреВрд░реНрдг рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди


рд╕рднреА рдХреЛрдб Doxygen рд╢реИрд▓реА рдореЗрдВ рдЯрд┐рдкреНрдкрдгреА рдХреА рдЧрдИ рд╣реИ, рдЕрд░реНрдерд╛рдд рдЖрдк Doxywizard рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдкреНрд░рд▓реЗрдЦрди рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



рдпрд╣рд╛рдБ рдЙрджрд╛рд╣рд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ



рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░



рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рджрд┐рд▓рдЪрд╕реНрдк рд╕рд╡рд╛рд▓реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ рдЬреЛ рд▓реЗрдЦ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдереЗ:



рдЗрди рдореБрджреНрджреЛрдВ рдкрд░ рдХреЛрдИ рднреА рдЬрд╛рдирдХрд╛рд░реА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕реНрд╡рд╛рдЧрдд рдпреЛрдЧреНрдп рд╣реИред



рд╕реВрддреНрд░реЛрдВ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ



  1. http://www.rsdn.ru/article/patterns/generic-mvc2.xml
  2. http://en.wikipedia.org/wiki/Model-view-presenter
  3. http://www.rsdn.ru/article/patterns/ModelViewPresenter.xml
  4. http://thesmithfam.org/blog/2009/09/27/model-view-presenter-and-qt/
  5. http://doc.trolltech.com/qq/qq15-academic.html
  6. http://developer.qt.nokia.com/forums/viewthread/284



All Articles