рдХреНрдпреВрдЯреА рдХреНрд░рд┐рдПрдЯрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕рд┐рд╕реНрдЯрдо

рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛


рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░ред рдореБрдЭреЗ рддреБрд░рдВрдд рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЛ рд▓рд┐рдЦрдирд╛ рдмрд╣реБрдд рдкрд╣рд▓реЗ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕рдордп рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЕрдм рдореИрдВ рдЗрд╕реЗ рдЗрд╕рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рддреАрди рдЕрдзреВрд░реЗ рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рд╕реНрдердЧрд┐рдд рдХрд░ рджреВрдВрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рдкреЛрд╕реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ред

рдкрд░рд┐рдЪрдп


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

рдлрд┐рд░ рднреА, рдпрджрд┐ рдпрд╣ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдирд╣реАрдВ рдерд╛, рддреЛ рдпрд╣ рдиреЛрдЯ рдирд╣реАрдВ рд╣реЛрдЧрд╛: рдореИрдВрдиреЗ рдкреЛрд╕реНрдЯ рдХреЗ рдврд╛рдВрдЪреЗ рддрдХ рдмрд╣реБрдд рдХреБрдЫ рд▓рд┐рдпрд╛, рдЬрдмрдХрд┐ рдмрд╛рдж рдореЗрдВ рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдХреЗ рд▓рд┐рдП рдкреЛрд╕реНрдЯ рдХреЛ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдлреЗрдВрдХрдиреЗ / рдмрджрд▓рдиреЗ / рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ред Qt рдирд┐рд░реНрдорд╛рддрд╛ рдХрд╛ рд╕рдордп рд╕рдВрд╕реНрдХрд░рдг 2.4.0ред

рдЗрд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╕реЗ рдХреМрди рд▓рд╛рдн рдЙрдард╛ рд╕рдХрддрд╛ рд╣реИ? рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпреЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреНрдпреВрдЯреА-рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЗрд╕ рдЖрдИрдбреАрдИ рдХреЛ рдореБрдЦреНрдп рд╡рд┐рдХрд╛рд╕ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирд╛ рд╣реИред

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

рддреЛ, рдХрдЯ рдХреЗ рддрд╣рдд рд╣рдореЗрдВ рдХреНрдпрд╛ рдЗрдВрддрдЬрд╛рд░ рд╣реИ (рддреИрдпрд╛рд░ рдЕрдиреБрднрд╛рдЧ рдмреЛрд▓реНрдб рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рд╣реИрдВ):

  1. рдХреНрдпреВрдЯреА рдирд┐рд░реНрдорд╛рддрд╛ рдмрдирд╛рдПрдБ
  2. рдкрд╣рд▓рд╛ рд╡рд┐рд╕реНрддрд╛рд░
  3. рдирдП рдореЗрдиреВ рдФрд░ рдореЗрдиреВ рдЖрдЗрдЯрдо рдЬреЛрдбрд╝рдирд╛
  4. рдХреНрдпреВрдЯреА рдирд┐рд░реНрдорд╛рддрд╛ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛
  5. рдПрдХ рдирдпрд╛ рд╕рдВрдкрд╛рджрдХ рдЬреЛрдбрд╝рдирд╛
  6. рдПрдХ рд╕рд╛рдЗрдб рдиреЗрд╡рд┐рдЧреЗрд╢рди рдмрд╛рд░ рдЬреЛрдбрд╝рдирд╛
  7. рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдбрд╛рдпрд▓реЙрдЧ рдореЗрдВ рдПрдХ рдкреЗрдЬ рдЬреЛрдбрд╝рдирд╛
  8. рдЦреЛрдЬ рд╕рдВрд╡рд╛рдж рдореЗрдВ рдПрдХ рдлрд╝рд┐рд▓реНрдЯрд░ рдЬреЛрдбрд╝рдирд╛
  9. рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкреНрд░рдХрд╛рд░ рдЬреЛрдбрд╝рдирд╛

рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛ рджреВрдВ рдХрд┐ рдХреНрдпреВрдЯреА рдХреНрд░рд┐рдПрдЯрд░ рдЯреНрд░реЛрд▓рдЯреЗрдХ (рдиреЛрдХрд┐рдпрд╛) рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рдХреНрдпреВрдЯреА рдврд╛рдВрдЪреЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдореБрдлреНрдд рдЖрдИрдбреАрдИ рд╣реИред рдЖрдкрдХреЛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ, рд╕рднреА рдПрдХреНрд╕рдЯреЗрдВрд╢рдиреЛрдВ рдХрд╛ рдПрдХ рд╕рд░рд▓ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкрд╛рда рд╕рдВрдкрд╛рджрдХ рдмрдирд╛рдиреЗ рд╕реЗ рдХреНрдпрд╛ рдирд╣реАрдВ рд░реЛрдХрддрд╛ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ, рд╕реИрдХрдбрд╝реЛрдВ рдЪрд┐рддреНрд░!

1. рдХреНрдпреВрдЯреА рдирд┐рд░реНрдорд╛рддрд╛ рдмрдирд╛рдПрдБ


рдкреВрд░реЗ IDE рдХреЛ рдЕрд╕реЗрдВрдмрд▓ рдХрд░рдирд╛ рдПрдХ рдХрд╛рдлреА рд╕рд░рд▓ рдХреНрд░рд┐рдпрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдХреНрдпреВрдЯреА рдХреНрд░рд┐рдПрдЯрд░ рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рдВрд╕реНрдХрд░рдг 2.4 рд╣реИред рдбрд╛рдЙрдирд▓реЛрдб / Qt-Creator рдЕрдиреБрднрд╛рдЧ рд╕реЗ qt.nokia.com рд╕реЗ рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ:
рдЫрд╡рд┐
рдЕрдЧрд▓рд╛, рдкрд░рд┐рдгрд╛рдореА рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдЕрдирдкреИрдХ рдХрд░реЗрдВ, рд╕реНрд░реЛрдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдмрд┐рд▓реНрдб рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдПрдВ, рдЙрд╕ рдкрд░ рдЬрд╛рдПрдВ, qmake рдЪрд▓рд╛рдПрдВ рдФрд░ рдлрд┐рд░ рдмрдирд╛рдПрдВ:
$ tar -xvf qt-creator-2.4.0-src.tar.gz $ mkdir qt-creator-2.4.0-src/build $ cd qt-creator-2.4.0-src/build/ $ qmake ../qtcreator.pro тАУrecursive $ make 

рд╡рд┐рдВрдбреЛрдЬ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХреЛрдб рдХреЗрд╡рд▓ рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рдореЗрдВ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рдореЗрдХ рдХреЗ рдмрдЬрд╛рдп, рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рд╡рд░реАрдпрддрд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ mingw32-make рдпрд╛ nmake рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

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

2. рдкрд╣рд▓рд╛ рд╡рд┐рд╕реНрддрд╛рд░


рдЬреИрд╕рд╛ рдХрд┐ рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЖрдкрдХреЛ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдмрдирд╛рдХрд░ Qt рдХреНрд░рд┐рдПрдЯрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕рд┐рд╕реНрдЯрдо рдХреА рдЦреЛрдЬ рд╢реБрд░реВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рдЕрдм рд╣рдо рдПрдХ рдРрд╕рд╛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ DoNothing рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рд▓реЗрдЦрди рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреНрдпреВрдЯреА рдХреНрд░рд┐рдПрдЯрд░ рдХреЗ рдЖрдзрд╛рд░ рд╡рд░реНрдЧреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдиреЗрдВрдЧреЗ рдФрд░ рдЙрдкрд▓рдмреНрдз рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреА рд╕реВрдЪреА рдореЗрдВ "DoNothing" рд▓рд╛рдЗрди рджреЗрдЦреЗрдВрдЧреЗред
рдЫрд╡рд┐
рдЫрд╡рд┐

2.1 рдХреНрдпреВрдЯреА рдХреНрд░рд┐рдПрдЯрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛

рдкрд╣рд▓реЗ, рдпрд╣ рд╕рдВрд╕реНрдХрд░рдг 2.0 рддрдХ рд▓рдЧрддрд╛ рд╣реИ, рдЗрд╕ рдЪрд░рдг рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдмрдирд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛:

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рддрдм рдЖрдкрдХреЛ рдпрд╛ рддреЛ рд╡рд┐рд╕реНрддрд╛рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ $$ QT_CREATOR_ROOT / src / plugins рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдбрд╛рд▓рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛ рдЗрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕реНрдерд╛рди рдкрд░ рд░рдЦрдХрд░, рдЖрдкрдХреЛ .pro рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрд░реЛрдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдФрд░ Qt рдирд┐рд░реНрдорд╛рддрд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдХреНрдпреВрдЯреА рдХреНрд░рд┐рдПрдЯрд░ рдХреЗ рдЖрдзреБрдирд┐рдХ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдХрд╣реАрдВ рднреА рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдирдпрд╛ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡рд┐рдЬрд╝рд╛рд░реНрдб рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ - рдЗрд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП "рдХреНрдпреВрдЯреА рдХреНрд░рд┐рдПрдЯрд░ рдореЙрдбреНрдпреВрд▓"ред рдлрд┐рд▓рд╣рд╛рд▓ рдПрдХ рдирдпрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ /
рдмрд╣реБрдд рд╢реБрд░реБрдЖрдд рдореЗрдВ, рд╕рдм рдХреБрдЫ рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рд╣реИ - рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ,
рдЫрд╡рд┐
рдирд╛рдо рдФрд░ рдкрде рдХреЛ рдЙрд╕рдХреА рдирд┐рдпреБрдХреНрддрд┐ рдХреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж
рдЫрд╡рд┐
рдЕрд╕реЗрдВрдмрд▓реА рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп, рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдпрд╣ рдбреЗрд╕реНрдХрдЯреЙрдк рд╣реИред
рдЫрд╡рд┐
рд▓реЗрдХрд┐рди рдЙрд╕рдХреЗ рдмрд╛рдж, рдереЛрдбрд╝рд╛ рдЬрд╛рджреВ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ - рд╣рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЬрд╛рдирдХрд╛рд░реА рднрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
рдЫрд╡рд┐
рдпрд╣рд╛рдВ, рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕рдм рдХреБрдЫ рддрд╕реНрд╡реАрд░ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реИред рдпрд╣рд╛рдБ рдХреЗрд╡рд▓ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдлрд╝реАрд▓реНрдб Qt рдХреНрд░рд┐рдПрдЯрд░ рдХреЗ рд╕реНрд░реЛрдд / рдирд┐рд░реНрдорд╛рдг рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдкрде рд╣реИрдВред рд╣рдо рдЬрд╛рджреВрдЧрд░ рдХреЛ рдкреВрд░рд╛ рдХрд░рддреЗ рд╣реИрдВ:
рдЫрд╡рд┐
рдФрд░ рдкрд░рд┐рдгрд╛рдореА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рджреЗрдЦреЗрдВ:
рдЫрд╡рд┐

2.2 рд╕реЗрд╡рд╛ рдлрд╛рдЗрд▓реЗрдВ

рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдмрд╣реБрдд рд╕рд╛рд░реА рдлрд╛рдЗрд▓реЗрдВ рдФрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдПрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХреА рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ рд╣реИред рд╣рдо рдЙрд╕ рдЪреАрдЬрд╝ рд╕реЗ рдирд┐рдкрдЯреЗрдВрдЧреЗ рдЬреЛ рд╣рдордиреЗ рдКрдкрд░ рджреЗрдЦреА рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХреА:
 TARGET = DoNothing TEMPLATE = lib DEFINES += DONOTHING_LIBRARY # DoNothing files SOURCES += donothingplugin.cpp HEADERS += donothingplugin.h\ donothing_global.h\ donothingconstants.h OTHER_FILES = DoNothing.pluginspec # Qt Creator linking ## set the QTC_SOURCE environment variable to override the setting here QTCREATOR_SOURCES = $$(QTC_SOURCE) isEmpty(QTCREATOR_SOURCES):QTCREATOR_SOURCES=/home/kafeg/devel/Qt/qt-creator-2.4.0-src ## set the QTC_BUILD environment variable to override the setting here IDE_BUILD_TREE = $$(QTC_BUILD) isEmpty(IDE_BUILD_TREE):IDE_BUILD_TREE=/home/kafeg/devel/Qt/qt-creator-2.4.0-src/build ## uncomment to build plugin into user config directory ## <localappdata>/plugins/<ideversion> ## where <localappdata> is eg ## "%LOCALAPPDATA%\Nokia\qtcreator" on Windows Vista and later ## "$XDG_DATA_HOME/Nokia/qtcreator" or "~/.local/share/Nokia/qtcreator" on Linux ## "~/Library/Application Support/Nokia/Qt Creator" on Mac # USE_USER_DESTDIR = yes PROVIDER = DoNothingCompany include($$QTCREATOR_SOURCES/src/qtcreatorplugin.pri) include($$QTCREATOR_SOURCES/src/plugins/coreplugin/coreplugin.pri) LIBS += -L$$IDE_PLUGIN_PATH/Nokia 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рдЙрддреНрдкрдиреНрди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд╛рдо (DoNothing) рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдкреНрд░рдХрд╛рд░ (рдкреБрд╕реНрддрдХрд╛рд▓рдп) рд╡рд░реНрдгрд┐рдд рд╣реИрдВ, рддреАрди рд╣реЗрдбрд░ рдлрд╛рдЗрд▓реЗрдВ рдФрд░ рдПрдХ рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓ рдЗрдВрдЧрд┐рдд рдХреА рдЧрдИ рд╣реИ, рдкреНрд▓рдЧ рдЗрди рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред Qt рдХреНрд░рд┐рдПрдЯрд░ рд╕реНрд░реЛрддреЛрдВ рдХрд╛ рд╕реНрдерд╛рди рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдмрд╛рд╣рд░ рдирд┐рд░реНрджреЗрд╢ рджрд┐рдП рдЧрдП рд╣реИрдВ, рдирд┐рд░реНрджреЗрд╢ рджрд┐рдП рдЧрдП рд╣реИрдВ рдХрд┐ рдЕрд╕реЗрдВрдмрд▓реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ Qt рдХреНрд░рд┐рдПрдЯрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рди рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рд╕реНрдерд╛рдиреАрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ, рдкреНрд░рджрд╛рддрд╛ рдХреЛ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЕрдВрддрд┐рдо рд╕реНрдерд╛рди рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдЕрдВрдд рдореЗрдВ, рд╕рднреА рдПрдХреНрд╕рдЯреЗрдВрд╢рди qtcreatorplugin.pri рдФрд░ coreplugin.pri рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рдлрд╛рдЗрд▓реЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЬреЛ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╣реА рд▓рд┐рдВрдХрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд donothing_global.h рдлрд╝рд╛рдЗрд▓реЗрдВ:
 #ifndef DONOTHING_GLOBAL_H #define DONOTHING_GLOBAL_H #include <QtCore/QtGlobal> #if defined(DONOTHING_LIBRARY) # define DONOTHINGSHARED_EXPORT Q_DECL_EXPORT #else # define DONOTHINGSHARED_EXPORT Q_DECL_IMPORT #endif #endif // DONOTHING_GLOBAL_H 

рдФрд░
 #ifndef DONOTHINGCONSTANTS_H #define DONOTHINGCONSTANTS_H namespace DoNothing { namespace Constants { const char * const ACTION_ID = "DoNothing.Action"; const char * const MENU_ID = "DoNothing.Menu"; } // namespace DoNothing } // namespace Constants #endif // DONOTHINGCONSTANTS_H 

рдпрд╣рд╛рдВ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдЧреЗ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЗ рдмрд┐рдирд╛ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИред рдФрд░ рдЬреЛ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ - рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рд╣рдореЗрдВ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕ рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рд╕реЗрд╡рд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА DoNothing.pluginspec.in рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдкреВрд░реА рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ:
 <plugin name=\"DoNothing\" version=\"0.0.1\" compatVersion=\"0.0.1\"> <vendor>DoNothingCompany</vendor> <copyright>(C) DoNothing Company</copyright> <license>DoNothing Company license text here</license> <description>DoNothing Company short description of plugin here</description> <url>http://www.donothing.com</url> <dependencyList> <dependency name=\"Core\" version=\"$$QTCREATOR_VERSION\"/> </dependencyList> </plugin> 

рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдЕрдВрддрддрдГ рдмрд╛рдЗрдирд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рд╡рд┐рддрд░рд┐рдд рдХреА рдЬрд╛рдПрдЧреА рдФрд░ рд╣рдорд╛рд░реЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛ рдПрдХ рд╕рд░рд▓ рд╡рд┐рд╡рд░рдг рд╣реИред рдФрд░ рдпрд╣рд╛рдБ рд╡рд╣ рд╡рд░реНрдгрд┐рдд рд╣реИ:
  1. рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдирд╛рдо рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдирд╛рдо рдЬреЛ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡рд┐рдВрдбреЛрдЬ рдкрд░ DoNothing.dll рдФрд░ Unix рдкрд░ libDoNothing.so)
  2. рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕рдВрд╕реНрдХрд░рдг
  3. рдХреНрдпреВрдЯреА рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
  4. рд╡рд┐рдХреНрд░реЗрддрд╛ рдХрд╛ рдирд╛рдо
  5. рдХреЙрдкреАрд░рд╛рдЗрдЯ
  6. рд▓рд╛рдЗрд╕реЗрдВрд╕ рдкрд╛рда
  7. рд╡рд┐рд╡рд░рдг
  8. рд╡рд┐рдХреНрд░реЗрддрд╛ url
  9. рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреА рд╕реВрдЪреА рдЬрд┐рд╕ рдкрд░ рдпрд╣ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред

реи.рей рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

рдХрд┐рд╕реА рд░рд┐рдХреНрдд рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╣рдорд╛рд░реЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд▓рд┐рдП рджреЛ рдореБрдЦреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╡реЗ рдХреНрдпрд╛ рдкрд╕рдВрдж рд╣реИрдВ? рдореБрдЦреНрдп рдЖрд╡рд╢реНрдпрдХрддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореБрдЦреНрдп рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреНрд▓рд╛рд╕ рдХреЛ IPlugin рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЗрд╕рдХреЗ рдХреБрдЫ рддрд░реАрдХреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
donothingplugin.h
 #ifndef DONOTHING_H #define DONOTHING_H #include "donothing_global.h" #include <extensionsystem/iplugin.h> namespace DoNothing { namespace Internal { class DoNothingPlugin : public ExtensionSystem::IPlugin { Q_OBJECT public: DoNothingPlugin(); ~DoNothingPlugin(); bool initialize(const QStringList &arguments, QString *errorString); void extensionsInitialized(); ShutdownFlag aboutToShutdown(); private slots: void triggerAction(); }; } // namespace Internal } // namespace DoNothing #endif // DONOTHING_H 

рдЗрд╕ рдХреЛрдб рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдлрд╝рд╛рдЗрд▓ рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
 #include "donothingplugin.h" #include "donothingconstants.h" #include <coreplugin/icore.h> #include <coreplugin/icontext.h> #include <coreplugin/actionmanager/actionmanager.h> #include <coreplugin/actionmanager/command.h> #include <coreplugin/actionmanager/actioncontainer.h> #include <coreplugin/coreconstants.h> #include <QtGui/QAction> #include <QtGui/QMessageBox> #include <QtGui/QMainWindow> #include <QtGui/QMenu> #include <QtCore/QtPlugin> using namespace DoNothing::Internal; DoNothingPlugin::DoNothingPlugin() { // Create your members } DoNothingPlugin::~DoNothingPlugin() { // Unregister objects from the plugin manager's object pool // Delete members } 

рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдФрд░ рдбрд┐рд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдореВрд▓ рдЪрд░ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рд╡рд┐рдЧреЗрдЯреНрд╕ рдФрд░ / рдпрд╛ рдПрдХреНрд╢рди (рдПрдХреНрд╢рди) рдирд╣реАрдВ рд╣реИрдВред
 bool DoNothingPlugin::initialize(const QStringList &arguments, QString *errorString) { // Register objects in the plugin manager's object pool // Load settings // Add actions to menus // connect to other plugins' signals // "In the initialize method, a plugin can be sure that the plugins it // depends on have initialized their members." Q_UNUSED(arguments) Q_UNUSED(errorString) Core::ActionManager *am = Core::ICore::instance()->actionManager(); QAction *action = new QAction(tr("DoNothing action"), this); Core::Command *cmd = am->registerAction(action, Constants::ACTION_ID, Core::Context(Core::Constants::C_GLOBAL)); cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+Alt+Meta+A"))); connect(action, SIGNAL(triggered()), this, SLOT(triggerAction())); Core::ActionContainer *menu = am->createMenu(Constants::MENU_ID); menu->menu()->setTitle(tr("DoNothing")); menu->addAction(cmd); am->actionContainer(Core::Constants::M_TOOLS)->addMenu(menu); return true; } 

рдЖрд░рдЯреАрдИ рдХреНрд░рд┐рдПрдЯрд░ рдХреЛ рддрдм рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм Qt Creator рдпрд╣ рддрдп рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЕрд╡рд╕реНрдерд╛ рдХреЛ рдЖрд░рдВрдн рдХрд░рдиреЗ рдФрд░ рдХреНрдпреВрдЯреА рдХреНрд░рд┐рдПрдЯрд░ рдореЗрдВ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

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

рдЕрдм рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдпрд╣ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрджрд┐ рдЖрд░рдВрднреАрдХрд░рдг рд╕рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рд╕рд╣реА рд▓реМрдЯрдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрджрд┐ рдпрд╣ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЧрд▓рдд рд╡рд╛рдкрд╕ рд▓реМрдЯрд╛рдПрдВ рдФрд░ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреЛ рддреНрд░реБрдЯрд┐рд╢реАрд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдорд╛рдирд╡ рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд┐рдЦреЗрдВред
 void DoNothingPlugin::extensionsInitialized() { // Retrieve objects from the plugin manager's object pool // "In the extensionsInitialized method, a plugin can be sure that all // plugins that depend on it are completely initialized." } 

рдкреНрд░рд╛рд░рдВрдн рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж ExtensionInitialized () рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЙрди рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╣рд╛рдпрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВред
 ExtensionSystem::IPlugin::ShutdownFlag DoNothingPlugin::aboutToShutdown() { // Save settings // Disconnect from signals that are not needed during shutdown // Hide UI (if you add UI that is not in the main window directly) return SynchronousShutdown; } 

рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рдореЗрдореЛрд░реА рд╕реЗ рдЕрдирд▓реЛрдб рдХрд┐рдП рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ aboutToShutdown () рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
 void DoNothingPlugin::triggerAction() { QMessageBox::information(Core::ICore::instance()->mainWindow(), tr("Action triggered"), tr("This is an action from DoNothing.")); } Q_EXPORT_PLUGIN2(DoNothing, DoNothingPlugin) 

2.4 рдмрд┐рд▓реНрдб рдФрд░ рдЯреЗрд╕реНрдЯ рдПрдХреНрд╕рдЯреЗрдВрд╢рди

рд╣рдорд╛рд░реЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдХреБрдВрдЬреА рд╕рдВрдпреЛрдЬрди Ctrl + R рджрдмрд╛рдПрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рдЕрд╕реЗрдВрдмрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ Qt Ceator рдХреА рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╢реБрд░реВ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ Qt Creator рдХреЛ рдпрд╣ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдХреИрд╕реЗ рдЪрд▓рд╛рдирд╛ рд╣реИред рдпрд╣ рд╕реНрдерд┐рддрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рд╕реЗрдЯрд┐рдВрдЧ рдкреЗрдЬ (рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ -> рд▓реЙрдиреНрдЪ -> рд▓реЙрдиреНрдЪ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди -> рдкреНрд░реЛрдЧреНрд░рд╛рдо) рдкрд░ рддрдп рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ:
рдЫрд╡рд┐
рдкрд░рд┐рдгрд╛рдо рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдХреНрдпреВрдЯреА рдХреНрд░рд┐рдПрдЯрд░, рдЙрди рдПрдХреНрд╕рдЯреЗрдВрд╢рдиреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдПрдХ рдирдИ рд▓рд╛рдЗрди рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:
рдЫрд╡рд┐
рд╕рднреА рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреА рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдХреБрдЫ рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирдИ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рджрд┐рдЦрд╛рдИ рджреА:
 kafeg@kafeg-desktop:~/devel/Qt/qt-creator-2.4.0-src/build/lib/qtcreator/plugins/DoNothingCompany$ ls DoNothing.pluginspec libDoNothing.so 

рдЗрд╕ рддрд░рд╣ рд╣рдо рдХреНрдпреВрдЯреА рдХреНрд░рд┐рдПрдЯрд░ рдХреЗ рд╕рдмрд╕реЗ рдмреБрдирд┐рдпрд╛рджреА рд╡рд┐рд╕реНрддрд╛рд░ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЪрд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред

3 рдирдП рдореЗрдиреВ рдФрд░ рдореЗрдиреВ рдЖрдЗрдЯрдо рдЬреЛрдбрд╝рдирд╛


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

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

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

3.1 рдХреЛрд░ :: рдПрдХреНрд╢рди рдореИрдиреЗрдЬрд░

рдХреНрдпреВрдЯреА рдХреНрд░рд┐рдПрдЯрд░ рдХрд╛ рдореВрд▓ рд╣рд┐рд╕реНрд╕рд╛, рдпрд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рд╕рд┐рд░реНрдл рдПрдХ рдЦрд╛рд▓реА рдЦрд┐рдбрд╝рдХреА рд╣реИ рдЬреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд▓реЛрдб рдХрд░ рд╕рдХрддрд╛ рд╣реИред Qt Creator рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рд╕рднреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдЗрд╕рдХреЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреНрдпреВрдЯреА рдХреНрд░рд┐рдПрдЯрд░ рдХрд╛ рдореБрдЦреНрдп рд╡рд┐рд╕реНрддрд╛рд░ "рдХреЛрд░" рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рдмрд┐рдирд╛, рдХреНрдпреВрдЯреА рдирд┐рд░реНрдорд╛рддрд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред

рдХреЛрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдореБрдЦреНрдп рдШрдЯрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ ActionManager рд╣реИред ActionManager рд╕рднреА рдореЗрдиреВ, рдореЗрдиреВ рдЖрдЗрдЯрдо рдФрд░ рдХреАрдмреЛрд░реНрдб рд╢реЙрд░реНрдЯрдХрдЯ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╡рд╕реНрддреБ рд╣реИред рджрд░рдЕрд╕рд▓, рдпрджрд┐ рд╣рдо рдПрдХ рдирдпрд╛ рдореЗрдиреВ рдЖрдЗрдЯрдо рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ ActionManager рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдереЛрдбрд╝рд╛ рдХрдо, рд╣рдо рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдПрдВрдЧреЗ рдХрд┐ рдХреИрд╕реЗ ...
ActionManager рдСрдмреНрдЬреЗрдХреНрдЯ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдХреЛрдб рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП:
 #include <coreplugin/actionmanager/actionmanager.h> #include <coreplugin/icore.h> ... Core::ActionManager* am = Core::ICore::instance()->actionManager(); 

3.2 рдХреЛрд░ :: рдПрдХреНрд╢рдирдХрдВрдЯреЗрдирд░

ActionContianer Qt Creator рдореЗрдВ рдореЗрдиреВ рдФрд░ рдореЗрдиреВ рдмрд╛рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдХрднреА рднреА рд╕реАрдзреЗ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╡реЗ рдПрдХреНрд╢рди рдореИрдирдЬрд░ :: createMenu (), ActionManager :: createMenuBar () рдФрд░ рдЕрдиреНрдп рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рднреА рдореЗрдиреВ рд╕реЗ рдЬреБрдбрд╝реЗ ActionContainer рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВред ActionContainer рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
 #include <coreplugin/coreconstants.h> #include <coreplugin/actionmanager/actionmanager.h> #include <coreplugin/icore.h> Core::ActionManager* am = Core::ICore::instance()->actionManager(); Core::ActionContainer* ac = am->actionContainer( ID ); 

рдирд┐рдореНрди рддрд╛рд▓рд┐рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЖрдИрдбреА рджрд┐рдЦрд╛рддреА рд╣реИ рдЬреЛ рдЖрдкрдХреЛ ActionContainer рдЗрдВрд╕реНрдЯреЗрдВрд╕реЗрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдХреЛрд░ рджреГрд╢реНрдпрддрд╛ рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рдЖрдИрдбреА рдХрд╛рд╕реНрдЯ рдЪрд╛рд░ * рд╕реНрдерд┐рд░ рдЪрд░ рд╣реИрдВред
рдореЗрдиреНрдпреВрдЖрдИрдбреА
рдлрд╝рд╛рдЗрд▓рдХреЛрд░ :: рдирд┐рд░рдВрддрд░ :: M_FILE
рдлрд╝рд╛рдЗрд▓ -> рдирдпрд╛рдХреЛрд░ :: рдирд┐рд░рдВрддрд░ :: M_FILE_NEW
рдлрд╝рд╛рдЗрд▓ -> рдЦреЛрд▓реЗрдВрдХреЛрд░ :: рдирд┐рд░рдВрддрд░ :: M_FILE_OPEN
рдлрд╝рд╛рдЗрд▓ -> рд╣рд╛рд▓ рдХреА рдлрд╛рдЗрд▓реЗрдВрдХреЛрд░ :: рдирд┐рд░рдВрддрд░ :: M_FILE_RECENTFILES
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВрдХреЛрд░ :: рдирд┐рд░рдВрддрд░ :: M_EDIT
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ -> рдЙрдиреНрдирддрдХреЛрд░ :: рд╕реНрдерд┐рд░рд╛рдВрдХ :: M_EDIT_ADVANCED
рдЙрдкрдХрд░рдгрдХреЛрд░ :: рд╕реНрдерд┐рд░рд╛рдВрдХ :: M_TOOLS
рдЦрд┐рдбрд╝рдХреАрдХреЛрд░ :: рдирд┐рд░рдВрддрд░ :: M_WINDOW
рдЦрд┐рдбрд╝рдХреА рдХреЗ рд╢реАрд╢реЗрдХреЛрд░ :: рд╕реНрдерд┐рд░рд╛рдВрдХ :: M_WINDOW_PANES
рд╕рд╣рд╛рдпрддрд╛рдХреЛрд░ :: рдирд┐рд░рдВрддрд░ :: M_HELP

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╣рдо "рд╕рд╣рд╛рдпрддрд╛" рдореЗрдиреВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрддрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:
 #include <coreplugin/coreconstants.h> #include <coreplugin/actionmanager/actionmanager.h> #include <coreplugin/icore.h> ... Core::ActionManager* am = Core::ICore::instance()->actionManager(); Core::ActionContainer* ac = am->actionContainer( Core::Constants::M_HELP ); 

3.3 рдореЗрдиреВ рдФрд░ рдореЗрдиреВ рдЖрдЗрдЯрдо рдЬреЛрдбрд╝рдирд╛

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдо рдирдП рдореЗрдиреВ рдЖрдЗрдЯрдо рдХреИрд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЪрд▓рд┐рдП рдЕрдкрдиреЗ рдореМрдЬреВрджрд╛ рдлрдВрдХреНрд╢рди рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ () рдкрд░ рд▓реМрдЯрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВред
 bool DoNothingPlugin::initialize(const QStringList &arguments, QString *errorString) { Q_UNUSED(arguments) Q_UNUSED(errorString) Core::ActionManager *am = Core::ICore::instance()->actionManager(); QAction *action = new QAction(tr("DoNothing action"), this); Core::Command *cmd = am->registerAction(action, Constants::ACTION_ID, Core::Context(Core::Constants::C_GLOBAL)); cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+Alt+Meta+A"))); connect(action, SIGNAL(triggered()), this, SLOT(triggerAction())); Core::ActionContainer *menu = am->createMenu(Constants::MENU_ID); menu->menu()->setTitle(tr("DoNothing")); menu->addAction(cmd); am->actionContainer(Core::Constants::M_TOOLS)->addMenu(menu); return true; } 

рдпрд╣рд╛рдБ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рдЕрдм рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рддреЛ, рд╣рдореЗрдВ ActionManager рдХреЛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдорд┐рд▓рддрд╛ рд╣реИ, рдлрд┐рд░ рдПрдХ рдирдпрд╛ рдореЗрдиреВ рдЖрдЗрдЯрдо рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдХреАрдмреЛрд░реНрдб рд╢реЙрд░реНрдЯрдХрдЯ рдЕрд╕рд╛рдЗрди рдХрд░рддреЗ рд╣реИрдВред рдлрд┐рд░ рд╣рдо рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдореЗрдиреВ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕рдореЗрдВ рдЙрд╕ рдЖрдЗрдЯрдо рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдордиреЗ рдЕрднреА рдмрдирд╛рдпрд╛ рдерд╛ред рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдЕрдм рд╕реНрдерд┐рд░рд╛рдВрдХ ACTION_ID рдФрд░ MENU_ID рдХрд╛рдо рдореЗрдВ рдЖрдПред

рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ ActionContainer рдЯреВрд▓ рдореЗрдиреВ (M_TOOLS) рдХрд╛ рдкреЙрдЗрдВрдЯрд░ рдорд┐рд▓рддрд╛ рд╣реИ рдФрд░ рдЙрд╕рдореЗрдВ рдЕрдкрдирд╛ рдореЗрдиреНрдпреВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдорд╛рд░реЗ рдХреАрдмреЛрд░реНрдб рд╢реЙрд░реНрдЯрдХрдЯ рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╕рднреА рдХреАрдмреЛрд░реНрдб рд╢реЙрд░реНрдЯрдХрдЯ рдХреА рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЗрд╕рдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИ:
рдЫрд╡рд┐
рдпрд╣ рднреА рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЖрдк рдХрд╣реАрдВ рднреА рдЕрдкрдирд╛ рдореЗрдиреВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╣рдореЗрдВ рдЕрдкрдиреЗ рдореЗрдиреВ рдХреЛ рдореБрдЦреНрдп рдореЗрдиреВ рдмрд╛рд░ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛, рддреЛ M_TOOLS рд╕реНрдерд┐рд░ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо MENU_BAR рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдФрд░ рд╣рдорд╛рд░реЗ рдореЗрдиреВ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдореЗрдиреВ рдХреЗ рдЕрдВрджрд░ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдбрдореЗрдиреВ () рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
 am->actionContainer(Core::Constants::MENU_BAR)->addMenu(am->actionContainer(Core::Constants::M_HELP), menu); 

3.3 рдореЗрдиреВ рдЖрдЗрдЯрдо рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдЬрд╡рд╛рдм

рдЪреВрдВрдХрд┐ рдореЗрдиреВ рдЖрдЗрдЯрдо рдХреНрдпреВрдПрд╢рди рд╡рд░реНрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ, рд╣рдо рдЗрди рд╡рд╕реНрддреБрдУрдВ рджреНрд╡рд╛рд░рд╛ рднреЗрдЬреЗ рдЧрдП рд╕рдВрдХреЗрддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдЯреНрд░рд┐рдЧрд░ (рдмреВрд▓) рдпрд╛ рдЯреЙрдЧрд▓ (рдмреВрд▓) рдФрд░ рд╕реНрд▓реЙрдЯреНрд╕ рдмрдирд╛рдХрд░ рдЙрдирдХрд╛ рдЬрд╡рд╛рдм рджреЗрддреЗ рд╣реИрдВред рдлрд┐рд░, рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣рдорд╛рд░реЗ рдХреЛрдб рд╕реЗ рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
 ... connect(action, SIGNAL(triggered()), this, SLOT(triggerAction())); ... void DoNothingPlugin::triggerAction() { QMessageBox::information(Core::ICore::instance()->mainWindow(), tr("Action triggered"), tr("This is an action from DoNothing.")); } 

рдЫрд╡рд┐

4 рдХреНрдпреВрдЯреА рдирд┐рд░реНрдорд╛рддрд╛ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛


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

4.1 рдХреЛрд░ рдХреНрдпреВрдЯреА рдирд┐рд░реНрдорд╛рддрд╛

рдХреНрдпреВрдЯреА рдХреНрд░рд┐рдПрдЯрд░ рдХрд╛ рдХреЛрд░ рд╕рд┐рд░реНрдл рдПрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореИрдиреЗрдЬрд░ рд╣реИред рдЙрдирдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рднреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рддреА рд╣реИрдВред
рдЫрд╡рд┐


Qt Creator рдХреА рдореВрд▓ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдХреЛрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди (Core :: ICore) рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рдо рдкрд┐рдЫрд▓реЗ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдкрд╣рд▓реЗ рд╣реА рдЗрд╕ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЛ рдЫреВ рдЪреБрдХреЗ рд╣реИрдВред рдЕрдЧрд▓рд╛, рд╣рдо рдЗрд╕ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЛ рдХреЛрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░реЗрдВрдЧреЗред рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореИрдиреЗрдЬрд░ (ExtensionSystem :: PluginManager) рд╣реБрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреА рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХреБрдЫ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рджреВрд╕рд░реЛрдВ рдХреЛ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рек.реи рд╡рд┐рд╕реНрддрд╛рд░ рдХреНрдпрд╛ рд╣реИ?

рд╕рд┐рд╕реНрдЯрдо рд╕реНрддрд░ рдкрд░, рдПрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдПрдХ рд╕рд╛рдЭрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп (рд╡рд┐рдВрдбреЛрдЬ рдкрд░ DLL, рд▓рд┐рдирдХреНрд╕ рдкрд░ SO, рдореИрдХ рдкрд░ DYLIB) рд╣реИред рдбреЗрд╡рд▓рдкрд░ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдПрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдПрдХ рдореЙрдбреНрдпреВрд▓ рд╣реИ рдЬреЛ:
  1. рдПрдХреНрд╕рдЯреЗрдВрд╢рдирд╕рд┐рд╕реНрдЯрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ :: IPlugin рдЗрдВрдЯрд░рдлрд╝реЗрд╕ред рдкрд╛рда рдореЗрдВ рдЖрдЧреЗ рд╣рдо рдПрдХ рд╕рдорд╛рди рд╡рд░реНрдЧ рдХреЛ "рдкреНрд▓рдЧрд┐рди рдХреНрд▓рд╛рд╕" рдХрд╣реЗрдВрдЧреЗред
  2. Q_EXPORT_PLUGIN рдореИрдХреНрд░реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд▓рдЧрдЗрди рд╡рд░реНрдЧ рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддрд╛ рд╣реИред
  3. рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдпреБрдХреНрдд (рдкреНрд▓рдЧрд┐рди рдирд╛рдо) .pluginspec рдлрд╝рд╛рдЗрд▓ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
  4. рдПрдХ рдпрд╛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЕрдиреНрдп рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИред
  5. рдЕрдиреНрдп рдПрдХреНрд╕рдЯреЗрдВрд╢рди рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рд╡рд╕реНрддреБрдУрдВ рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред

рд╣рдо рдкрд╣рд▓реЗ рддреАрди рдЕрдВрдХреЛрдВ рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рд╣реА рдорд┐рд▓ рдЪреБрдХреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрд╣реАрдВ рди рдХрд╣реАрдВ рд╣рдо рдЕрдВрддрд┐рдо рджреЛ рдкрд░ рдЖ рдЧрдП рд╣реИрдВред

4.2.1 рдЙрдкрд▓рдмреНрдз рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕реВрдЪреА рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ?

рдЙрдкрд▓рдмреНрдз рд╡рд╕реНрддреБрдУрдВ рдХреЛ PluginManager рдХреЗ рдЕрдВрджрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреВрд▓ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред PluginManager рд╕реЗ allObjects () рд╡рд┐рдзрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдкреВрд░реЗ рдкреВрд▓ рдХреЛ QObject рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддреА рд╣реИред рдиреАрдЪреЗ рд╡рд╣ рдХреЛрдб рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рдЙрдкрд▓рдмреНрдз рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рд┐рдВрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 #include <extensionsystem/pluginmanager.h> ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); QList<QObject*> objects = pm->allObjects(); QListWidget* listWidget = new QListWidget; Q_FOREACH(QObject* obj, objects) { QString objInfo = QString("%1 (%2)") .arg(obj->objectName()) .arg(obj->metaObject()->className()); listWidget->addItem(objInfo); } listWidget->show(); 

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдХреЛрдб рдХреЗ рдЗрд╕ рднрд╛рдЧ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЕрдкрдиреЗ рдкрд╛рд╕ рдЙрдкрд▓рдмреНрдз рд╡рд╕реНрддреБрдУрдВ рдХреА рдПрдХ рд▓рдВрдмреА рд╕реВрдЪреА рджреЗрдЦреЗрдВрдЧреЗ:
рдЫрд╡рд┐

рд╕реВрдЪреА рдореЗрдВ рдирд╛рдореЛрдВ рд╕реЗ, рд╣рдо рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдПрдХреНрд╕рдЯреЗрдВрд╢рди рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдм рд╣рдо "рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рд╡рд╕реНрддреБ" рд╢рдмреНрдж рдХреА рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рдкрд░рд┐рднрд╛рд╖рд╛ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ:

рдкреНрд░рджрд╛рди рдХреА рдЧрдИ (рдирд┐рд░реНрдпрд╛рдд рдХреА рдЧрдИ) рд╡рд╕реНрддреБ QObject рдХреНрд▓рд╛рд╕ (рдпрд╛ рдЙрд╕рдХреЗ рд╡рдВрд╢рдЬ) рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рдПрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдкреВрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдиреНрдп рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИред

4.2.2 рдЙрдкрд▓рдмреНрдз рд╡рд╕реНрддреБ рдХреА рд╕реВрдЪреА рдореЗрдВ рдЕрдкрдиреА рд╡рд╕реНрддреБ рдХрд╛ рдирд┐рд░реНрдпрд╛рдд рдХреИрд╕реЗ рдХрд░реЗрдВ?

рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рддреАрди рддрд░реАрдХреЗ рд╣реИрдВ:

IPlugin :: addObject () рдФрд░ IPlugin :: addAutoReleasedObject () рд╡рд┐рдзрд┐рдпрд╛рдБ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ PluginManager :: addObject () рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддреА рд╣реИрдВред
IPlugin рддрд░реАрдХреЗ рд╕рд┐рд░реНрдл рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рд╣реИрдВред рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИред AddAutoReleasedObject () рдФрд░ addObject () рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдкрд╣рд▓реА рд╡рд┐рдзрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреЛрдбрд╝реЗ рдЧрдП рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ рдФрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдирд╖реНрдЯ рд╣реЛрдиреЗ рдкрд░ рдЙрдкрд▓рдмреНрдз рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ (рд░рд┐рд╡рд░реНрд╕ рдСрд░реНрдбрд░ рдореЗрдВ) рдХреЗ рдкреВрд▓ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрд┐рд╕реА рднреА рд╕рдордп, рдЖрдк рдЙрдкрд▓рдмреНрдз рдкреВрд▓ рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП IPlugin :: removeObject (QObject *) рд╡рд┐рдзрд┐ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВред

4.2.3 рдХрд┐рди рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдирд╛ рд╣реИ?

рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд┐рд╕реА рднреА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкреНрд░рджрд╛рди (рдирд┐рд░реНрдпрд╛рдд) рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдорддреМрд░ рдкрд░ рдирд┐рд░реНрдпрд╛рдд рдХреА рдЧрдИ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдЖрдзрд╛рд░ рдкрд░ рд╕рдВрд░рдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдиреНрдп Qt рдирд┐рд░реНрдорд╛рддрд╛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдирд┐рд░реНрдпрд╛рдд рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рддреА рд╣реИред рдпрд╣рд╛рдБ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рд╣реИрдВ:

рд╕реА ++ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЗрд╕ рддрдереНрдп рдХреЗ рдЖрджреА рд╣реИрдВ рдХрд┐ рдХрдХреНрд╖рд╛рдПрдВ рдЖрдорддреМрд░ рдкрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╣рд▓рд╛рддреА рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рд╕рднреА рддрд░реАрдХреЗ рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рдЖрднрд╛рд╕реА рдФрд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╣реИрдВред Qt Creator рдореЗрдВ, рдЗрдВрдЯрд░рдлреЗрд╕ QObject рдХреЗ рд╡рдВрд╢рдЬ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рдЖрднрд╛рд╕реА рддрд░реАрдХреЗ рд╣реИрдВред

рдпрджрд┐ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореЗрдВ рдРрд╕реА рд╡рд╕реНрддреБрдПрдБ рд╣реИрдВ рдЬреЛ рдХрд┐рд╕реА рднреА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИрдВ, рддреЛ рдРрд╕реА рд╡рд╕реНрддреБ рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдПрдХреНрд╕рдЯреЗрдВрд╢рди INavigationWidgetFactory рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рдХреЛрд░ рдЗрд╕реЗ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдкреИрдирд▓ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдмрдирд╛рдП рдЧрдП рд╡рд┐рдЬреЗрдЯ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрдард╛рдПрдЧрд╛ред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдХреЛрд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдмрд╛рд░ рдореЗрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг qtablewidget рдЬреЛрдбрд╝рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ: INavigationWidgetFit рдЗрдВрдЯрд░рдлрд╝реЗрд╕ред
 #include <coreplugin/inavigationwidgetfactory.h> #include <QTableWidget> class NavWidgetFactory : public Core::INavigationWidgetFactory { public: NavWidgetFactory() { } ~NavWidgetFactory() { } Core::NavigationView createWidget() { Core::NavigationView view; view.widget = new QTableWidget(50, 3); return view; } QString displayName() const { return "Spreadsheet"; } int priority() const { return 0; } QString id() const { return "Spreadsheet"; } }; bool DoNothingPlugin::initialize(const QStringList &arguments, QString *errorString) { ... // Provide a navigation widget factory. // Qt Creator's navigation widget will automatically // hook to our INavigationWidgetFactory implementation, which // is the NavWidgetFactory class, and show the QTableWidget // created by it in the navigation panel. addAutoReleasedObject(new NavWidgetFactory); return true; } 

рдФрд░ рдпрд╣рд╛рдБ рдкрд░рд┐рдгрд╛рдо рд╣реИ:
рдЫрд╡рд┐

рек.реи.рек рдирдП рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рдЕрдзрд┐рд╕реВрдЪрдирд╛ред

рдЬрдм PluginManager :: addObject () рд╡рд┐рдзрд┐ рдХрд╣рд▓рд╛рддреА рд╣реИ, рддреЛ PluginManager рдПрдХ objectAdded рд╕рдВрдХреЗрдд (QObject *) рднреЗрдЬрддрд╛ рд╣реИред рдпрд╣ рд╕рдВрдХреЗрдд рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпреВрдЯреА рдХреНрд░рд┐рдПрдЯрд░ рдЪрд▓рдиреЗ рдХреЗ рджреМрд░рд╛рди рдХреМрди рд╕реА рд╡рд╕реНрддреБрдПрдВ рдирдИ рдЬреЛрдбрд╝реА рдЧрдИ рдереАрдВред

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

рдЖрдорддреМрд░ рдкрд░, рдЗрд╕ рд╕рд┐рдЧреНрдирд▓ рд╕реЗ рдЬреБрдбрд╝рд╛ рдПрдХ рд╕реНрд▓реЙрдЯ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХреЛрдб рдХреА рддрд░рд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдПрдХ рдирдИ рд╡рд╕реНрддреБ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ рд╣реИ рдЬреЛ INavigationWidgetFactory рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
 void Plugin::slotObjectAdded(QObject * obj) { INavigationWidgetFactory *factory = Aggregation::query<INavigationWidgetFactory>(obj); if(factory) { // use it here... } } 

4.2.4 рд╡рд╕реНрддреБ рдЦреЛрдЬ

рдХрднреА-рдХрднреА рдПрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬреЛ рдирд┐рд╢реНрдЪрд┐рдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЕрдм рд╣рдо рдРрд╕реА рд╡рд╕реНрддреБрдУрдВ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рдЬрд╛рдирддреЗ рд╣реИрдВ:

рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдбреЗрд╡рд▓рдкрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, PluginManager :: getObjects () рд╡рд┐рдзрд┐ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╣рдо рдЙрди рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдвреВрдВрдврдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдЗрдирд╡рд┐рдЬрд┐рд╡рд┐рдЯрд┐рдЧрд╡реЗрдЯрдлреИрдХреНрдЯрд░реА рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИрдВ, рддреЛ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:
 ExtensionSystem::PluginManager* pm = ExtensionSystem::PluginManager::instance(); QList<Core::INavigationWidgetFactory*> objects = pm->getObjects<Core::INavigationWidgetFactory>(); 

4.3 рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдПрдХрддреНрд░реАрдХрд░рдг

рдПрдХрддреНрд░реАрдХрд░рдг рдХреА рд╕рд╣рд╛рдпрддрд╛ рд╕реЗ, рд╣рдо рдХрдИ рд╡рд┐рд╖рдо QObjects рдХреЛ рдПрдХ рд╡рд╕реНрддреБ рдореЗрдВ рдПрдХрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред Qt Creator рдЖрдорддреМрд░ рдкрд░ рдХрдИ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
 #include <aggregation/aggregate.h> class Interface1 : public QObject { Q_OBJECT public: Interface1() { } ~Interface1() { } }; class Interface2 : public QObject { Q_OBJECT public: Interface2() { } ~Interface2() { } }; Aggregation::Aggregate bundle; bundle.add(new Interface1); bundle.add(new Interface2); 

рдЕрдм рдмрдВрдбрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рджреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдкреЙрдЗрдВрдЯрд░реНрд╕ рд╣реЛрддреЗ рд╣реИрдВред рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 Interface1* iface1Ptr = Aggregation::query<Interface1>( &bundle ); Interface2* iface2Ptr = Aggregation::query<Interface2>( &bundle ); 

рдЖрдк рдПрдХ рдмрдВрдбрд▓ рдореЗрдВ рдХрдИ рдЗрдВрдЯрд░рдлреЗрд╕ рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 Aggregation::Aggregate bundle; bundle.add(new Interface1); bundle.add(new Interface2); bundle.add(new Interface1); bundle.add(new Interface1); QList<Interface1*> iface1Ptrs = Aggregation::query_all<Interface1>( &bundle ); 

рдФрд░ рджреЛрдиреЛрдВ рдЬреЛрдбрд╝рд╛ рдЗрдВрдЯрд░рдлреЗрд╕ рдФрд░ рдмрдВрдбрд▓ рдХреЛ рднреА рд╣рдЯрд╛ рджреЗрдВ:
 Aggregation::Aggregate* bundle = new Aggregation::Aggregate; bundle->add(new Interface1); bundle->add(new Interface2); Interface1* iface1Ptr = Aggregation::query<Interface1>(bundle); delete iface1Ptr; // deletes the bundle and all objects in it // same as delete bundle 

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

5 рдПрдХ рдирдпрд╛ рд╕рдВрдкрд╛рджрдХ рдЬреЛрдбрд╝рдирд╛ (рд╕рдВрдкрд╛рджрдХ)


рдПрдХ рдмреБрдирд┐рдпрд╛рджреА рд╕реНрддрд░ (рдПрдХ рд╣реА рдХреЛрд░ рдкреНрд▓рдЧрдЗрди) рдкрд░, рдХреНрдпреВрдЯреА рдирд┐рд░реНрдорд╛рддрд╛ рдПрдХ рдкрд╛рда рд╕рдВрдкрд╛рджрдХ рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрдкрдпреБрдХреНрдд рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде, рдЗрд╕рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдореЗрдВ рдХрд╛рдлреА рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рд╡рд┐рднрд┐рдиреНрди рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ, C ++ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░рд┐рдлрд▓реЗрдХреНрдЯрд░рд┐рдВрдЧ рдФрд░ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдЯреВрд▓, рдФрд░ рдПрдХ рдЯреЗрдХреНрд╕реНрдЯ рдПрдбрд┐рдЯрд░ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред UI (Qt Designer), JS / QML, QRC рд╕рдВрд╕рд╛рдзрди рдлрд╝рд╛рдЗрд▓реЗрдВ, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЗрдВ (PRO / PRI), рд╕рд╛рде рд╣реА рдкреНрд░рдХрд╛рд░ EXE / DLL / SO рдХреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рдВрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реЗрдХреНрд╕ рд╕рдВрдкрд╛рджрдХ рдХреЗ рд╕рдВрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдг рд╣реИрдВред

рдЗрд╕ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ HTML рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдлрд╝рд╛рдЗрд▓ рд╕реНрд╡рд░реВрдкреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрдкрд╛рджрдХреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рд╕рдордЭреЗрдВрдЧреЗред рдЬрдм рд╣рдо рд╕рдВрдкрд╛рджрдХ рдХреЗ рд╕рд╛рде рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд╕рдВрдкрд╛рджрдХ рдХреЛ HTML рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИред

5.1 рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдФрд░ рдЗрдВрдЯрд░рдлреЗрд╕

рдирдП рд╕рдВрдкрд╛рджрдХ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдП:

рдЕрдм рд╣рдо рдЗрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЗрдВрдЯрд░рдлреЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред

5.1.1 рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛрд░ :: IFileред

рдпрд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдлрд╝рд╛рдЗрд▓реЛрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмреАрдЪ рдПрдХ рдЕрдореВрд░реНрдд рдкрд░рдд рд╣реИред рдпрд╣ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ / рд╕рд╣реЗрдЬрдиреЗ, рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рдЖрднрд╛рд╕реА рддрд░реАрдХреЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдорд╛рдЗрдо рдкреНрд░рдХрд╛рд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдФрд░ рдХреБрдЫ рдЭрдВрдбреЗ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рднреА рдорджрдж рдХрд░рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "рд╕рдВрд╢реЛрдзрд┐рдд" рдФрд░ "рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП")ред рдпрд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ src / plugins / coreplugin / ifile.h рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ :

рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИ - рдЕрдЧрд░ QFile рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИ рддреЛ рдореБрдЭреЗ IFile рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рдпрд╣рд╛рдБ рдЬрд╡рд╛рдм рд╣реИ:

5.1.2 рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛрд░ :: IEditorред

рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рднрд┐рдиреНрди рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрдкрд╛рджрдХреЛрдВ рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдореЗрдВ рдШреЛрд╖рд┐рдд src / plugins / coreplugin / editormanager / ieditor.h

рдХреЛрд░ :: IEditor рдореБрдЦреНрдп рд░реВрдк рд╕реЗ sludeyuschemu рддрдХ рдкрд╣реБрдБрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛:

рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рд╕реЗ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╕реНрдерд┐рдд рд╣реИред
рдЫрд╡рд┐

5.1.3 рдХреЛрд░ :: IEditorFactory рдЗрдВрдЯрд░рдлрд╝реЗрд╕

рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╢реЛ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рддрддреНрдХрд╛рд▓ рдорд╛рдЗрдо рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдХреЛрд░ :: IEditor рддреНрд╡рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдорд┐рд▓рддреЗ рд╣реИрдВред Src / plugins / coreplugin / editormanager / ieditorfactory.h рдореЗрдВ рд╡рд┐рдЬреНрдЮрд╛рдкрдиред

IEditorFactory :: mimeType () рд╡рд┐рдзрд┐ рд╕рдВрдкрд╛рджрдХ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдорд╛рдЗрдо рдкреНрд░рдХрд╛рд░ рд▓реМрдЯрд╛рддреА рд╣реИред IEditorFactory :: createEditor () рд╡рд┐рдзрд┐ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрдкрд╛рджрдХ рдмрдирд╛рддреА рд╣реИред

5.1.4 рдХреЛрд░ :: MimeDatabase Class

рдХреЛрд░ :: MimeDatabase Qt Creator рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рд╕рднреА рдорд╛рдЗрдо рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдорд╛рдЗрдо рдкреНрд░рдХрд╛рд░ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рднреА рдорджрдж рдХрд░рддрд╛ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг:
 #include <coreplugin/mimedatabase.h> Core::ICore* core = Core::ICore::instance(); Core::MimeDatabase* mdb = core->mimeDatabase(); Core::MimeType type1 = mdb->findByFile( QFileInfo("C:/Temp/sample.html") ); qDebug("File Type for sample.html = %s", qPrintable(type1.type())); Core::MimeType type2 = mdb->findByFile( QFileInfo("C:/Temp/TextEdit/Main.cpp") ); qDebug("File Type for Main.cpp = %s", qPrintable(type2.type())); Core::MimeType type3 = mdb->findByFile( QFileInfo("C:/Temp/TextEdit/TextEdit.pro") ); qDebug("File Type for TextEdit.pro = %s", qPrintable(type3.type())); 

рдФрд░ рдирд┐рд╖реНрдХрд░реНрд╖:
 File Type for sample.html = text/plain File Type for Main.cpp = text/x-c++src File Type for TextEdit.pro = text/plain 

рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЛрд░ :: MimeDatabase рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдорд╛рдЗрдо рдкреНрд░рдХрд╛рд░ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдкреНрд░рддреНрдпрдп, рдкреИрдЯрд░реНрди рдФрд░ рдЕрдиреНрдп рдЬрд╛рджреБрдИ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕рдХреЗ рдорд╛рдЗрдо рдкреНрд░рдХрд╛рд░ рджреНрд╡рд╛рд░рд╛ рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рджреЗрдЦреЗрдВ:
  1. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓рддрд╛ рд╣реИ (рдлрд╝рд╛рдЗрд▓ -> рдЦреЛрд▓реЗрдВ)ред
  2. Qt Creator рдЪрдпрдирд┐рдд рдлрд╝рд╛рдЗрд▓ рдХреЗ рдорд╛рдЗрдо-рдкреНрд░рдХрд╛рд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Core :: MimeDatabase рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
  3. Qt рдХреНрд░рд┐рдПрдЯрд░ рд╕рднреА рдХреЛрд░ :: IEditorFactory рдХреЛ рдЙрдирдХреЗ рдорд╛рдЗрдо рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕реНрдХреИрди рдХрд░рддрд╛ рд╣реИред
  4. Qt Creator рдиреЗ Core :: IEditorFactory рдХреЛ Core :: IEditor рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ред
  5. рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░ :: IEditor :: рд╡рд┐рдЬреЗрдЯ () рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛ рд╡рд┐рдЬреЗрдЯ рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИред
  6. рд╡рд┐рдзрд┐ рдХреЛрд░ :: IEditor :: open () рдХреЛ рдкрд╣рд▓реЗ рдЪрд░рдг рдореЗрдВ рдЪрдпрдирд┐рдд рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХреЗ рд╕рд╛рде рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

5.1.5 рдПрдХ рдирдпрд╛ рдорд╛рдЗрдо рдкреНрд░рдХрд╛рд░ рдЬреЛрдбрд╝рдирд╛

рдпрджрд┐ рд╣рдо рдирдП рд╕рдВрдкрд╛рджрдХ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рд╣рдорд╛рд░реЗ рдирдП рд╕рдВрдкрд╛рджрдХ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдорд╛рдЗрдо рдкреНрд░рдХрд╛рд░ рдХреЛ рдХреЛрд░ :: MimeDatabase рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕реЗ рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ, рдЕрдм рд╣рдо XML рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдХрд░ рд╕рд░рд▓рддрдо рддрд░реАрдХреЗ рд╕реЗ рджреЗрдЦреЗрдВрдЧреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдЯреЗрдХреНрд╕реНрдЯ / html рдорд╛рдЗрдо рдкреНрд░рдХрд╛рд░ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ * .html рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рд╣рдо рдПрдХ XML рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЯреЗрдХреНрд╕реНрдЯ-html-mimetype.xml рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ :
 <?xml version="1.0" encoding="UTF-8"?> <mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'> <mime-type type="text/html"> <sub-class-of type="text/plain"/> <comment>HTML File</comment> <glob pattern="*.html"/> </mime-type> </mime-info> 

рдЕрдм рд╣рдо рдЗрд╕ mime рдкреНрд░рдХрд╛рд░ рдХреЛ рдХреЛрд░ :: MimeDatabase :: addMimeTypes () рд╡рд┐рдзрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрдВрдЬреАрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 Core::ICore* core = Core::ICore::instance(); Core::MimeDatabase* mdb = core->mimeDatabase(); QString errMsg; bool success = mdb->addMimeTypes("text-html-mimetype.xml", errMsg); 

рдЬреИрд╕реЗ рд╣реА рд╣рдордиреЗ рдРрд╕рд╛ рдХрд┐рдпрд╛, рдХреНрдпреВрдЯреА рдХреНрд░рд┐рдПрдЯрд░ рддреБрд░рдВрдд рд╕рднреА * .html рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдорд╛рдЗрдо рдЯрд╛рдЗрдк рдЯреЗрдХреНрд╕реНрдЯ / html рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред

5.2 рдХреНрдпреВрдЯреА рдирд┐рд░реНрдорд╛рддрд╛ HTML рд╕рдВрдкрд╛рджрдХ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВред

рдареАрдХ рд╣реИ, рд╕рд┐рджреНрдзрд╛рдВрдд рдкрд░ рдереЛрдбрд╝рд╛ рд░реБрдХрдХрд░, рд╣рдо рдПрдХ рд╕рдВрдкрд╛рджрдХ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ HTML рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рджреЗрдЦрдиреЗ / рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЕрдкрдиреА рдпреЛрдЬрдирд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХрдИ рд╡рд░реНрдЧ рдмрдирд╛рдиреЗ рд╣реЛрдВрдЧреЗ:
рд╡рд░реНрдЧрдЖрдзрд╛рд░ рд╡рд░реНрдЧрд╡рд┐рд╡рд░рдг
HtmlEditorWidgetQTabWidgetрдпрд╣ рджреЛ рдЯреИрдм рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рдЬреЗрдЯ рд╣реЛрдЧрд╛, рдкрд╣рд▓реЗ рдкрд░ рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░реЗ рдкрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд╛ рд╕реНрд░реЛрддред
HtmlFileрдХреЛрд░ :: IFileHtmlEditorWidget рдХреЗ рд▓рд┐рдП IFile рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред
рдПрдЪрдЯреАрдПрдордПрд▓ рдПрдбрд┐рдЯрд░рдХреЛрд░ :: IEditorHtmlEditorWidget рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдФрд░ HtmlFile рдХреЗ рд╕рд╛рде рдЗрд╕рдХреЗ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП IEDitor рдЗрдореНрдкреНрд▓реАрдЯрд░ред
HtmlEditorFactoryрдХреЛрд░ :: IEditorFactory"рдЯрд╛рдЗрдк / html" рдорд╛рдЗрдо рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ IEditor рдХреЗ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП IEDitorFactory рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
HtmlEditorPluginрдХреЛрд░ :: IPluginрдЗрдкреНрд▓рд┐рдореЗрдВрдЯреНрд╕ IPlugin Qt рдХреНрд░рд┐рдПрдЯрд░ рдХреЗ рд╕рд╛рде рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдХреЛ рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рддреЛ, рд╣рдо рдХреНрдпреВрдЯреА рдХреНрд░рд┐рдПрдЯрд░ рдореЙрдбреНрдпреВрд▓ рдХреА рдПрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП HTMLEditor рдХрд╣рддреЗ рд╣реИрдВ, рдФрд░ рдкрдврд╝рддреЗ рд╣реИрдВред

5.2.1 HTML рд╕рдВрдкрд╛рджрдХ рд╡рд┐рдЬреЗрдЯ рд▓рд╛рдЧреВ рдХрд░рдирд╛

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдХреНрдпреВрдЯреА рдХреНрд░рд┐рдПрдЯрд░ HTML рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЯреЗрдХреНрд╕реНрдЯ рдПрдбрд┐рдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╣рдо рдПрдХ рджреЛ-рдЯреИрдм рд╕рдВрдкрд╛рджрдХ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдПрдХ рдЯреИрдм рдкрд░ рдЖрдк рдкреГрд╖реНрда рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рджреВрд╕рд░реЗ рдкрд░ - рдЗрд╕реЗ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВред
 #ifndef HTMLEDITORWIDGET_H #define HTMLEDITORWIDGET_H #include <QTabWidget> #include <QWebView> #include <QPlainTextEdit> struct HtmlEditorWidgetData { QWebView *webView; QPlainTextEdit *textEdit; bool modified; QString path; }; class HtmlEditorWidget : public QTabWidget { Q_OBJECT public: HtmlEditorWidget(QWidget* parent = 0); ~HtmlEditorWidget(); void setContent(const QByteArray& ba, const QString& path=QString()); QByteArray content() const; QString title() const; protected slots: void slotCurrentTabChanged(int tab); void slotContentModified(); signals: void contentModified(); void titleChanged(const QString&); private: HtmlEditorWidgetData* d; }; #endif // HTMLEDITORWIDGET_H 

рдбрд┐рдЬрд╛рдЗрдирд░ рджреЛ QWebView рдФрд░ QPlainTextEdit рд╡рд┐рдЬреЗрдЯ рдмрдирд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рд╡рд╣ рдЙрдиреНрд╣реЗрдВ рд╡рд░реНрддрдорд╛рди рд╡рд┐рдЬреЗрдЯ рдХреЗ рдЯреИрдм рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдФрд░ рддреАрди рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рддрд╛ рд╣реИ:
  1. рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрд░реЛрдд рдХреЛ рджреЗрдЦрдиреЗ рд╕реЗ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рддрд╛ рд╣реИ, рддреЛ QWeBView рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
  2. рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рд╛рдордЧреНрд░реА рдмрджрд▓рддрд╛ рд╣реИ, рддреЛ рд╕рдВрдХреЗрдд рднреЗрдЬрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ
  3. рдЕрдВрдд рдореЗрдВ, рдЖрдкрдХреЛ QWebView рд╣реЗрдбрд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

 #include "htmleditorwidget.h" HtmlEditorWidget::HtmlEditorWidget(QWidget* parent) :QTabWidget(parent) { d = new HtmlEditorWidgetData; d->webView = new QWebView; d->textEdit = new QPlainTextEdit; addTab(d->webView, "Preview"); addTab(d->textEdit, "Source"); //setTabPosition(QTabWidget::South); setTabShape(QTabWidget::Triangular); d->textEdit->setFont( QFont("Courier", 12) ); connect(this, SIGNAL(currentChanged(int)), this, SLOT(slotCurrentTabChanged(int))); connect(d->textEdit, SIGNAL(textChanged()), this, SLOT(slotContentModified())); connect(d->webView, SIGNAL(titleChanged(QString)), this, SIGNAL(titleChanged(QString))); d->modified = false; } 

рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдХреЗрд╡рд▓ рдирд┐рдЬреА рд╡рд╕реНрддреБ рдХреЛ рд╣рдЯрд╛рддрд╛ рд╣реИ:
 HtmlEditorWidget::~HtmlEditorWidget() { delete d; } 

SetContent () рд╡рд┐рдзрд┐ webView рдФрд░ textEdit рдХреА рд╕рд╛рдордЧреНрд░реА рд╕реЗрдЯ рдХрд░рддреА рд╣реИред рдФрд░ рд╕рд╛рдордЧреНрд░реА () рд╡рд┐рдзрд┐ рддрджрдиреБрд╕рд╛рд░ рд╕рд╛рдордЧреНрд░реА рд▓реМрдЯрд╛рддреА рд╣реИред рд╢реАрд░реНрд╖рдХ () рд╡рд┐рдзрд┐ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реМрдЯрд╛рддреА рд╣реИ рдЬрд┐рд╕реЗ рдЦреБрд▓реА рдлрд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЦреИрд░, рдЕрдВрддрд┐рдо рджреЛ рд╡рд┐рдзрд┐рдпрд╛рдВ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдореЗрдВ рдмрдирд╛рдП рдЧрдП рд╕рд┐рдЧреНрдирд▓ рдХрдиреЗрдХреНрд╢рди рдХреЛ рд╕рдВрднрд╛рд▓рддреА рд╣реИрдВред
 void HtmlEditorWidget::setContent(const QByteArray& ba, const QString& path) { if(path.isEmpty()) d->webView->setHtml(ba); else d->webView->setHtml("file:///" + path); d->textEdit->setPlainText(ba); d->modified = false; d->path = path; } QByteArray HtmlEditorWidget::content() const { QString htmlText = d->textEdit->toPlainText(); return htmlText.toAscii(); } QString HtmlEditorWidget::title() const { return d->webView->title(); } void HtmlEditorWidget::slotCurrentTabChanged(int tab) { if(tab == 0 && d->modified) setContent( content(), d->path ); } void HtmlEditorWidget::slotContentModified() { d->modified = true; emit contentModified(); } 

5.2.2 рдХреЛрд░ :: IFile рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

рд╣рдо рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ HtmlFile рд╡рд░реНрдЧ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╡рд░реНрдЧ рдХреЛрд░ :: IFile рд╕реЗ рдХрдИ рдЖрднрд╛рд╕реА рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдЧрд╛ рдФрд░ рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╢реЛрдзрд┐рдд рдзреНрд╡рдЬ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред
 #ifndef HTMLFILE_H #define HTMLFILE_H #include <coreplugin/ifile.h> #include "htmleditorconstants.h" struct HtmlFileData; class HtmlEditor; class HtmlEditorWidget; class HtmlFile : public Core::IFile { Q_OBJECT public: HtmlFile(HtmlEditor* editor, HtmlEditorWidget* editorWidget); ~HtmlFile(); void setModified(bool val=true); bool isModified() const; QString mimeType() const; bool save(QString *errorString, const QString &fileName, bool autoSave); bool reload(QString *errorString, ReloadFlag flag, ChangeType type); void rename(const QString &newName); bool open(const QString &fileName); void setFilename(const QString& filename); QString fileName() const; QString defaultPath() const; QString suggestedFileName() const; QString fileFilter() const; QString fileExtension() const; bool isReadOnly() const; bool isSaveAsAllowed() const; void modified(ReloadBehavior* behavior); protected slots: void modified() { setModified(true); } private: HtmlFileData* d; }; struct HtmlFileData { HtmlFileData() : mimeType(HTMLEditor::Constants::C_HTMLEDITOR_MIMETYPE), editorWidget(0), editor(0), modified(false) { } const QString mimeType; HtmlEditorWidget* editorWidget; HtmlEditor* editor; QString fileName; bool modified; }; #endif // HTMLFILE_H 

рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ, рд╣рдо рдмрд╕ рдЙрди рд╕рдВрдШреЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдореЗрдВ, рдирд┐рдЬреА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╣рдЯрд╛ рджреЗрдВред
 #include "htmlfile.h" #include <QFile> #include <QFileInfo> #include "htmleditor.h" #include "htmleditorwidget.h" HtmlFile::HtmlFile(HtmlEditor* editor, HtmlEditorWidget* editorWidget) : Core::IFile(editor) { d = new HtmlFileData; d->editor = editor; d->editorWidget = editorWidget; } HtmlFile::~HtmlFile() { delete d; } 

SetModified () рд╡рд┐рдзрд┐ рд╕рдВрд╢реЛрдзрд┐рдд рдзреНрд╡рдЬ рдХреЛ рд╕реЗрдЯ рдХрд░рддреА рд╣реИ рдФрд░ рдПрдХ рдкрд░рд┐рд╡рд░реНрддрд┐рдд () рд╕рд┐рдЧреНрдирд▓ рднреЗрдЬрддреА рд╣реИ
 void HtmlFile::setModified(bool val) { if(d->modified == val) return; d->modified = val; emit changed(); } bool HtmlFile::isModified() const { return d->modified; } 

рдпрд╣рд╛рдБ рд╕реЗ рд╣рдо рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рдорд╛рдЗрдо рдкреНрд░рдХрд╛рд░ рдХреЛ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред
 QString HtmlFile::mimeType() const { return d->mimeType; } 

рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╕рдордп рд╕рд╣реЗрдЬреЗрдВ () рд╡рд┐рдзрд┐ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ -> рдореЗрдиреВ рдЖрдЗрдЯрдо рд╕рд╣реЗрдЬреЗрдВ рдпрд╛ рдХреАрдмреЛрд░реНрдб рд╢реЙрд░реНрдЯрдХрдЯ Ctrl + S рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред рдпрд╣ рд╡рд░реНрддрдорд╛рди рд╕рдВрдмрджреНрдз рдлрд╝рд╛рдЗрд▓ рдореЗрдВ HtmlEditorWidget (textEdit рд╕реЗ) рдХреА рд╕рд╛рдордЧреНрд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░ рд╕рдВрд╢реЛрдзрд┐рдд рдзреНрд╡рдЬ рдХреЛ рдЧрд▓рдд рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
 bool HtmlFile::save(const QString &fileName) { QFile file(fileName); if(file.open(QFile::WriteOnly)) { d->fileName = fileName; QByteArray content = d->editorWidget->content(); file.write(content); setModified(false); return true; } return false; } 

рдЬрдм рдЖрдк рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдУрдкрди () рд╡рд┐рдзрд┐ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ -> рдУрдкрдиред рдпрд╛ рддреЛ Ctrl + O рдлрд╝рд╛рдЗрд▓ рдХреЛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╣рдорд╛рд░реЗ рд╕рдВрдкрд╛рджрди рд╡рд┐рдЬреЗрдЯ рдХреЗ рд╕реЗрдЯрдХрдВрдЯреЗрдВрдЯ () рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рднреЗрдЬрддрд╛ рд╣реИред
 bool HtmlFile::open(const QString &fileName) { QFile file(fileName); if(file.open(QFile::ReadOnly)) { d->fileName = fileName; QString path = QFileInfo(fileName).absolutePath(); d->editorWidget->setContent(file.readAll(), path); d->editor->setDisplayName(d->editorWidget->title()); return true; } return false; } bool HtmlFile::reload(QString *errorString, ReloadFlag flag, ChangeType type) { return open(d->fileName); } void HtmlFile::rename(const QString &newName) { QFile file(d->fileName); file.rename(newName); setFilename(newName); } void HtmlFile::setFilename(const QString& filename) { d->fileName = filename; } QString HtmlFile::fileName() const { return d->fileName; } QString HtmlFile::defaultPath() const { return QString(); } QString HtmlFile::suggestedFileName() const { return QString(); } QString HtmlFile::fileFilter() const { return QString(); } QString HtmlFile::fileExtension() const { return QString(); } bool HtmlFile::isReadOnly() const { return false; } bool HtmlFile::isSaveAsAllowed() const { return true; } void HtmlFile::modified(ReloadBehavior* behavior) { Q_UNUSED(behavior); } 

5.2.3 рдХреЛрд░ :: IEditor рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

рд╣рдо рдХреНрдпреВрдЯреА рдХреНрд░рд┐рдПрдЯрд░ рдХреЛ рд╣рдорд╛рд░реЗ html рд╕рдВрдкрд╛рджрдХ рд╡рд┐рдЬреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдПрдХ HtmlFile рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП IEditor рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
 #ifndef HTMLEDITOR_H #define HTMLEDITOR_H #include <coreplugin/editormanager/ieditor.h> #include <QToolBar> struct HtmlEditorData; class HtmlFile; class HtmlEditorWidget; class HtmlEditor : public Core::IEditor { Q_OBJECT public: HtmlEditor(HtmlEditorWidget* editorWidget); ~HtmlEditor(); bool createNew(const QString& /*contents*/ = QString()); QString displayName() const; IEditor* duplicate(QWidget* /*parent*/); bool duplicateSupported() const; Core::IFile* file(); bool isTemporary() const; const char* kind() const; bool open(const QString& fileName = QString()) ; bool restoreState(const QByteArray& /*state*/); QByteArray saveState() const; void setDisplayName(const QString &title); QToolBar* toolBar(); // From Core::IContext QWidget* widget(); Core::Context context() const; QString id() const; protected slots: void slotTitleChanged(const QString& title) { setDisplayName(title); } private: HtmlEditorData* d; }; 

HtmlEditorData рдСрдмреНрдЬреЗрдХреНрдЯ HtmlEditorWidget рдФрд░ HtmlFile рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдкреЙрдЗрдВрдЯрд░реНрд╕ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ, рдбрд┐рд╕реНрдкреНрд▓реЗрдиреЗрдо рд╡реИрд░рд┐рдПрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╕рдВрдкрд╛рджрдХ рдХреЗ рдирд╛рдо рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
 struct HtmlEditorData { HtmlEditorData() : editorWidget(0), file(0) { } HtmlEditorWidget* editorWidget; QString displayName; HtmlFile* file; Core::Context context; }; #endif // HTMLEDITOR_H 

рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЦреБрдж рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реИ, HtmlFile рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рддреАрдиреЛрдВ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рдмреАрдЪ рдПрд╕реЛрд╕рд┐рдПрд╢рди рдХреЛ рдЪрд┐рдкрдХрд╛рддрд╛ рд╣реИред рд╡рд┐рдзреНрд╡рдВрд╕рдХ, рдкрд░рдВрдкрд░рд╛ рд╕реЗ, рдХреЗрд╡рд▓ рдирд┐рдЬреА рд╡рд╕реНрддреБ рдХреЛ рд╣рдЯрд╛рддрд╛ рд╣реИред
 #include "htmleditor.h" #include "htmlfile.h" #include "htmleditorwidget.h" HtmlEditor::HtmlEditor(HtmlEditorWidget* editorWidget) : Core::IEditor(editorWidget) { d = new HtmlEditorData; d->editorWidget = editorWidget; d->file = new HtmlFile(this, editorWidget); //Core::UniqueIDManager* uidm = Core::UniqueIDManager::instance(); d->context = *(new Core::Context(HTMLEditor::Constants::C_HTMLEDITOR)); //<< uidm->uniqueIdentifier(HTMLEditor::Constants::C_HTMLEDITOR); connect(d->editorWidget, SIGNAL(contentModified()), d->file, SLOT(modified())); connect(d->editorWidget, SIGNAL(titleChanged(QString)), this, SLOT(slotTitleChanged(QString))); connect(d->editorWidget, SIGNAL(contentModified()), this, SIGNAL(changed())); } HtmlEditor::~HtmlEditor() { delete d; } 

рдорд╛рдирдЪрд┐рддреНрд░рдг рдХреЗ рд▓рд┐рдП рддреАрди рд╕рд░рд▓ рдХрд╛рд░реНрдпред
 QWidget* HtmlEditor::widget() { return d->editorWidget; } Core::Context HtmlEditor::context() const { return d->context; } Core::IFile* HtmlEditor::file() { return d->file; } 

CreateNew () рд╡рд┐рдзрд┐ HtmlEditorWidget рдФрд░ HtmlFile рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рддреА рд╣реИред
 bool HtmlEditor::createNew(const QString& contents) { Q_UNUSED(contents); d->editorWidget->setContent(QByteArray()); d->file->setFilename(QString()); return true; } 

рдУрдкрди () рд╡рд┐рдзрд┐ HtmlFile рдореЗрдВ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рд╕реЗ рдЧреБрдЬрд░рддреА рд╣реИред
 bool HtmlEditor::open(const QString &fileName) { return d->file->open(fileName); } 

рд╕рдВрдкрд╛рджрдХ рдХрд╛ рдкреНрд░рдХрд╛рд░ рд▓реМрдЯрд╛рддрд╛ рд╣реИред
 const char* HtmlEditor::kind() const { return HTMLEditor::Constants::C_HTMLEDITOR; } 

displayName рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЙрдореНрдмреЛрдмреЙрдХреНрд╕ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
 QString HtmlEditor::displayName() const { return d->displayName; } void HtmlEditor::setDisplayName(const QString& title) { if(d->displayName == title) return; d->displayName = title; emit changed(); } 

рдЕрдиреНрдп рд╡рд┐рдзрд┐рдпрд╛рдБ рдЗрддрдиреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИрдВред
 bool HtmlEditor::duplicateSupported() const { return false; } Core::IEditor* HtmlEditor::duplicate(QWidget* parent) { Q_UNUSED(parent); return 0; } QByteArray HtmlEditor::saveState() const { return QByteArray(); } bool HtmlEditor::restoreState(const QByteArray& state) { Q_UNUSED(state); return false; } QToolBar* HtmlEditor::toolBar() { return 0; } bool HtmlEditor::isTemporary() const { return false; } QString HtmlEditor::id() const { return QString(); } 

5.2.4 рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛрд░ :: IEditorFactory

HtmlEditorFactory рд╡рд░реНрдЧ рдХреЛрд░ :: IEditorFactory рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдЧрд╛ред
 #ifndef HTMLEDITORFACTORY_H #define HTMLEDITORFACTORY_H #include <coreplugin/editormanager/ieditorfactory.h> #include <QStringList> #include "htmleditorplugin.h" struct HtmlEditorFactoryData; class HtmlEditorFactory : public Core::IEditorFactory { Q_OBJECT public: HtmlEditorFactory(HTMLEditor::Internal::HTMLEditorPlugin* owner); ~HtmlEditorFactory(); QStringList mimeTypes() const; QString kind() const; Core::IEditor* createEditor(QWidget* parent); Core::IFile* open(const QString &fileName); private: HtmlEditorFactoryData* d; }; #endif // HTMLEDITORFACTORY_H 

HtmlEditorFactoryData рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ HtmlEditorFactory рд╡рд░реНрдЧ рдХрд╛ рдирд┐рдЬреА рдбреЗрдЯрд╛ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рддрд╛ HTMLEditor :: Constants :: C_HTMLEDITOR_MIMETYPE рдореЗрдВ рдирд┐рд╣рд┐рдд рдорд╛рдЗрдо рдкреНрд░рдХрд╛рд░ рд╕реЗ рдЗрд╕рдХреА рд╢реБрд░реБрдЖрдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕рдВрдкрд╛рджрдХ рдкреНрд░рдХрд╛рд░ рдХреЛ рдорд╛рди HTMLEditor :: Constants :: C_HTMLEDITOR рдХреЗ рд╕рд╛рде рдЖрд░рдВрдн рдХрд░рддрд╛ рд╣реИред Htmleditorconstants.h рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рднреА рд╕реНрдерд┐рд░рд╛рдВрдХ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
 #include "htmleditorfactory.h" #include "htmleditorconstants.h" #include <coreplugin/editormanager/editormanager.h> #include "htmleditorwidget.h" #include <QStringList> #include <coreplugin/editormanager/ieditor.h> #include "htmleditor.h" struct HtmlEditorFactoryData { HtmlEditorFactoryData() : kind(HTMLEditor::Constants::C_HTMLEDITOR) { mimeTypes << QString(HTMLEditor::Constants::C_HTMLEDITOR_MIMETYPE); } QString kind; QStringList mimeTypes; }; 

рдЕрдЧрд▓рд╛, рд╕рд░рд▓ рдкрд░рд┐рдЪрд┐рдд рддрд░реАрдХреЛрдВ рдХреА рдПрдХ рдмреВрдВрджред
 HtmlEditorFactory::HtmlEditorFactory(HTMLEditor::Internal::HTMLEditorPlugin* owner) :Core::IEditorFactory(owner) { d = new HtmlEditorFactoryData; } HtmlEditorFactory::~HtmlEditorFactory() { delete d; } QStringList HtmlEditorFactory::mimeTypes() const { return d->mimeTypes; } QString HtmlEditorFactory::kind() const { return d->kind; } 

рдУрдкрди () рд╡рд┐рдзрд┐ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХреЛ рд╕рдВрдкрд╛рджрдХ рдкреНрд░рдмрдВрдзрдХ рдХреЗ рдкрд╛рд╕ рджреЗрддреА рд╣реИ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рдпрд╛ рддреЛ рдПрдХ рдирдпрд╛ рд╕рдВрдкрд╛рджрдХ рдмрдирд╛рддрд╛ рд╣реИ, рдпрд╛ рдореМрдЬреВрджрд╛ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдЦреЛрд▓рддрд╛ рд╣реИред
 Core::IFile* HtmlEditorFactory::open(const QString& fileName) { Core::EditorManager* em = Core::EditorManager::instance(); Core::IEditor* iface = em->openEditor(fileName, d->kind); return iface ? iface->file() : 0; } 

рдпрд╣ рд╡рд┐рдзрд┐ HtmlEditor рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реИред
 Core::IEditor* HtmlEditorFactory::createEditor(QWidget* parent) { HtmlEditorWidget* editorWidget = new HtmlEditorWidget(parent); return new HtmlEditor(editorWidget); } 

5.2.5 рдореБрдЦреНрдп рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд░реНрдЧ

рд╣рдо рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдЬреНрдЮрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ HtmlEditorPlugin рд╡рд░реНрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рд╕рддреНрдп рдереЛрдбрд╝рд╛ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ () рд╡рд┐рдзрд┐ред
 bool HTMLEditorPlugin::initialize(const QStringList &arguments, QString *errorString) { Q_UNUSED(arguments) Q_UNUSED(errorString) Core::ICore* core = Core::ICore::instance(); Core::MimeDatabase* mdb = core->mimeDatabase(); QString *errMsg = new QString(); if(!mdb->addMimeTypes(":/text-html-mimetype.xml", errMsg)) return false; addAutoReleasedObject(new HtmlEditorFactory(this)); return true; } 

6 рдПрдХ рд╕рд╛рдЗрдб рдиреЗрд╡рд┐рдЧреЗрд╢рди рдмрд╛рд░ рдЬреЛрдбрд╝рдирд╛


Qt рдХреНрд░рд┐рдПрдЯрд░ рдореЗрдВ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдмрд╛рд░ рдПрдХ рдРрд╕рд╛ рдХреНрд╖реЗрддреНрд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдШрдЯрдХ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ:

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдПрдХ рд╕рд╛рде рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдХрдИ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдкреИрдирд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЫрд╡рд┐

рдпрд╛рдж рд░рдЦреЗрдВ, рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдПрдХ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдмрд╛рд░ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдереА рдЬрд┐рд╕рдореЗрдВ рдкрд┐рдЫрд▓реЗ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рд▓реЗрдмрд▓ рдерд╛? рдЕрдм рд╣рдо рд▓рдЧрднрдЧ рдПрдХ рд╣реА рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╣рдо рдХрд╛рд░реНрдп рдХреЛ рдереЛрдбрд╝рд╛ рдЬрдЯрд┐рд▓ рдХрд░реЗрдВрдЧреЗред

6.1 рдХреЛрд░ :: InavigationWidgetFactory

рдЗрд╕рд▓рд┐рдП, рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрд╣рдореЗрдВ рдпрд╛рдж рд╣реИ, рдПрдХ рдирдП рдиреЗрд╡рд┐рдЧреЗрд╢рди рдкреИрдирд▓ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдкреНрд▓рдЧрдЗрдиреНрд╕ / рдХреЛрд░рд▓рд┐рдм / inavigationwidgetfactory.h рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдерд┐рдд рдХреЛрд░ :: InavigationWidgetFactory рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЕрдкрдирд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

6.2 рдкреИрдирд▓ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЬреЗрдЯ рддреИрдпрд╛рд░ рдХрд░рдирд╛

рдХреНрдпреВрдЯреА рдирд┐рд░реНрдорд╛рддрд╛ рдореЙрдбреНрдпреВрд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдПрдВред рдФрд░ рд╣рдо рдЗрд╕реЗ FTPBrowser рдХрд╣реЗрдВрдЧреЗред рд╣рд╛рдВ, рдареАрдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореВрд▓ рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдерд╛ред рд╣рдореЗрдВ рдЗрд╕ рд▓рд┐рдВрдХ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП FtpDirModel рд╡рд░реНрдЧред

рдЕрдм рд╣рдо рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рдирдИ рдлреЙрд░реНрдо рдХреНрд▓рд╛рд╕ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдлреЙрд░реНрдо рдХреЛ рдЗрд╕ рдлреЙрд░реНрдо рдореЗрдВ рд▓рд╛рддреЗ рд╣реИрдВ:
рдЫрд╡рд┐
рдЬрдм рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдлрд╝рдЯреАрдкреА рдкрде рд▓рд╛рдЗрди рдореЗрдВ рдПрдлрд╝рдЯреАрдкреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдкрде рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЧреЛ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рдПрдлрд╝рдЯреАрдкреА рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рддреБрд░рдВрдд рдХреНрдпреВрдЯреНрд░реАрд╡реНрдпреВ рдореЗрдВ рдереЛрдбрд╝рд╛ рдХрдо рд╕реНрдерд┐рдд рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЗрд╕ рд╡рд┐рдЬреЗрдЯ рдХрд╛ рдирд╛рдо FTPBrowserForm рд░рдЦрд╛ред рдореИрдВ рдлреЙрд░реНрдо рдХрд╛ рд╕реНрд░реЛрдд рдирд╣реАрдВ рджреВрдВрдЧрд╛, рдЗрд╕реЗ рддрдм рдЕрдиреНрдп рд╕рднреА рдХреЗ рд╕рд╛рде рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рддреБрд░рдВрдд рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред
 #include <coreplugin/inavigationwidgetfactory.h> class FtpViewNavigationWidgetFactory : public Core::INavigationWidgetFactory { public: FtpViewNavigationWidgetFactory() { } ~FtpViewNavigationWidgetFactory() { } Core::NavigationView createWidget(); QString displayName() const { return "FTP View"; } int priority() const { return 0; } QString id() const { return "Spreadsheet"; } }; 

CreateWidget () рд╡рд┐рдзрд┐ рдХреЗрд╡рд▓ рдПрдХ рдирдпрд╛ рд╡рд┐рдЬреЗрдЯ рдмрдирд╛рддреА рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрдЗрдВрдЯрд░ рд▓реМрдЯрд╛рддреА рд╣реИред DisplayName () рд╡рд┐рдзрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реМрдЯрд╛рддреА рд╣реИред
 Core::NavigationView FtpViewNavigationWidgetFactory::createWidget() { Core::NavigationView view; view.widget = new FTPBrowserForm; return view; } 

рдпрд╣рд╛рдБ рд╣рдореЗрдВ рдХреНрдпрд╛ рдорд┐рд▓рд╛ рд╣реИ:
рдЫрд╡рд┐

6.3 рдкреИрдирд▓ рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рдФрд░ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛

рдХрднреА-рдХрднреА рдХреНрдпреВрдЯреА рдХреНрд░рд┐рдПрдЯрд░ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдкреИрдирд▓реЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрдЪрд╛рдиреЗ / рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, InavigationWidgetFactory рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рджреЛ рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдЪреБрдЕрд▓ рдлрд╝рдВрдХреНрд╢рдВрд╕ рд╣реИрдВ:
 void saveSettings(int position, QWidget *widget); void restoreSettings(int position, QWidget *widget); 

рдЗрди рджреЛрдиреЛрдВ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдХреЗ, рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдкрдиреЗ рд╡рд┐рдЬреЗрдЯ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рд╣рдорд╛рд░реЗ рдХреЛрдб рд╕реЗ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
 void FtpViewNavigationWidgetFactory::saveSettings(int position, QWidget *widget) { FTPBrowserForm* ftpExp = qobject_cast<FTPBrowserForm*>(widget); if(!ftpExp) return; QSettings *settings = Core::ICore::instance()->settings(); settings->setValue("FtpView.URL", ftpExp->url().toString()); } void FtpViewNavigationWidgetFactory::restoreSettings(int position, QWidget *widget) { FTPBrowserForm* ftpExp = qobject_cast<FTPBrowserForm*>(widget); if(!ftpExp) return; QSettings *settings = Core::ICore::instance()->settings(); QString urlStr = settings->value("FtpView.URL").toString(); ftpExp->setUrl( QUrl(urlStr) ); } 

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

рдлреВрдлрд╝ ... рдЕрднреА рдХреЗ рд▓рд┐рдП рдмрд╕ рдЗрддрдирд╛ рд╣реА ... рдмрд╛рдХреА рд▓реЗрдЦ рдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ ... рдХрдм рдФрд░ рдЕрдЧрд░ рдЗрд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдП =)

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


All Articles