рдЬреЙрди рдХреЙрдирд╡реЗ рдХреЗ Qt рдкрд░ "рдЬреАрд╡рди"

рд╣рд╛рдп {{рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо}}!



рдЖрдЬ рдореИрдВ рдпрд╣ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЬреЙрди рдХреЙрдирд╡реЗ рджреНрд╡рд╛рд░рд╛ Qt рдкрд░ рдЬреАрд╡рди рдХреЗ рд╕рднреА рдХреЗ рдкрд╕рдВрджреАрджрд╛ рдЦреЗрд▓ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПред рд╣рдо рд╡рд┐рдЧреЗрдЯреНрд╕ рдкрд░ рд▓рд┐рдЦреЗрдВрдЧреЗред рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ QPainter рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ, рдХреЛрд░, рд▓реЗрдЖрдЙрдЯреНрд╕ рдФрд░ рдЖрдо рддреМрд░ рдкрд░ Qt рд╡рд┐рдЬреЗрдЯреНрд╕ рдореЗрдВ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрдИ рдХрдХреНрд╖рд╛рдПрдВред рдХреЛрдИ рднреА рдЗрд╕ рдЦреЗрд▓ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддрд╛ рд╣реИ рдпрд╛ рдХреНрдпреВрдЯреА рдкрд░ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рдХреГрдкрдпрд╛ рдкрдврд╝реЗрдВред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд▓реЗрдЦ рд╢реБрд░реБрдЖрддреА рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдиреНрдирдд рд▓реЛрдЧреЛрдВ рдХреЛ рднреА :) рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдЖрд▓рд╕реНрдп рдХреЗ рд▓рд┐рдП - рдпрд╣рд╛рдБ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╕реНрд░реЛрдд рдирд┐рд╣рд┐рдд рд╣реИред рдЗрд╕реЗ рддреБрд░рдВрдд рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреЛрд░, рдЧреБрдИ рдкрд░ рдирд┐рд░реНрднрд░рддрд╛рдПрдВред


рд╡рд┐рдЪрд╛рд░


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

рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░


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

рдбрд┐рдЬрд╝рд╛рдЗрди


рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореИрдВрдиреЗ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдореИрдВ рдХрд┐рд╕реА рдХреЛ рдпреВрдЖрдИ рдбрд┐рдЬрд╛рдЗрдирд░ рдореЗрдВ рддреБрдЪреНрдЫ рдЪреАрдЬреЗрдВ рдХрд░рдирд╛ рдирд╣реАрдВ рд╕рд┐рдЦрд╛рдКрдВрдЧрд╛ред рдореИрдВ рдХреЗрд╡рд▓ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдкреЗрдВрдЯ рдХрд░реВрдВрдЧрд╛ред рдПрдХ рдХреНрд╖реИрддрд┐рдЬ рд▓реЗрдЖрдЙрдЯ рдкреНрд░рдмрдВрдзрдХ рдмрдирд╛рдПрдБред рдЗрд╕рдХреЗ рддрд╣рдд рд▓реЗрдЖрдЙрдЯрд┐рдо рд╕реЗрдВрдЯреНрд░рд▓рд╡реЗрдЯред рдлрд┐рд░ рд╣рдо рд╡рд╣рд╛рдВ (рдХреНрд╖реИрддрд┐рдЬ рдореЗрдВ) рджреЛ рдКрд░реНрдзреНрд╡рд╛рдзрд░ рдкреНрд░рдмрдВрдзрдХреЛрдВ рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдмрд╛рдИрдВ рдУрд░ рдЦреЗрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рдВрдбреЛ рд╣реЛрдЧреА, рджрд╛рдИрдВ рдУрд░ - рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВред рдбрд┐рдЬрд╛рдЗрдирд░ рдореЗрдВ, рд╡реЗ рд╕рдорд╛рди рдЖрдХрд╛рд░ рдХреЗ рджрд┐рдЦрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдХреЛрдб рдореЗрдВ рдЦрд┐рдВрдЪрд╛рд╡ рдХрд╛рд░рдХ (рдкрдбрд╝реЛрд╕реА рд▓реЗрдЖрдЙрдЯ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдЪреМрдбрд╝рд╛рдИ рдХрд╛ рдХрд╛рд░рдХ) рд╕реЗрдЯ рдХрд░реЗрдВрдЧреЗред рдЧреЗрдо рдХреЗ рд▓реЗрдЖрдЙрдЯ рдореЗрдВ QWidget рдбрд╛рд▓реЗрдВ - рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╣рдо рдлрд┐рд░ рдЕрдкрдиреЗ рдЧреЗрдо рд╡рд┐рдЬреЗрдЯ рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрдВрдЧреЗ, рдФрд░ рд▓реЗрдЖрдЙрдЯ рдореЗрдВ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ - рд╕реЗрдЯрд┐рдВрдЧреНрд╕))ред рдЖрдк рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдмрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рджрд┐рдЦрд╛рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ:


рд╕реЛрдЪрдирд╛ рд╢реБрд░реВ рдХрд░реЛ


рдЖрдЗрдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ рдорд╛рдлреА рдорд╛рдБрдЧрддрд╛ рд╣реВрдБ, рд▓реЗрдХрд┐рди рдореИрдВ рд╕реЛрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд▓рд╕реА рдерд╛, рдФрд░ рдореИрдВрдиреЗ рдкреВрд░реА рдЧрдгрдирд╛ рдХреЗ рд╕рд╛рде рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЬреАрд╡рди рд╕рд┐рдореБрд▓реЗрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рд╕рд╛рд░ рдмреЗрд╣рдж рд╕рд░рд▓ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдХреЛрд╢рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкрд┐рдЫрд▓реА рдкреАрдврд╝реА рдФрд░ рдЙрд╕рдХреЗ рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЗрд╕рдХреЗ рднрд╛рдЧреНрдп рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд▓рд╛рдн - рдпрд╣ рдорд┐рдирд░рд▓ рд╡рд╛рдЯрд░ рдХреИрдк рдЬрд┐рддрдирд╛ рд╕рд░рд▓ рд╣реИред рд╡рд┐рдкрдХреНрд╖ - рдХрд╛рдлреА рдорд╣рдВрдЧрд╛ред рд▓реЗрдХрд┐рди, рдЬреИрд╕рд╛ рдХрд┐ рд╕рднреА рдХреЗ рд╕рд╛рде рд╣реЛрддрд╛ рд╣реИ, рдЖрд▓рд╕реНрдп рдЬреАрдд рдЬрд╛рддрд╛ рд╣реИред рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреБрдЫ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд╕рд╛рде рдЖрдпрд╛ рдерд╛ред рд╣рдо рд╡рд░реНрддрдорд╛рди рдФрд░ рдЕрдЧрд▓реА рдкреАрдврд╝реА рдХреЗ рд▓рд┐рдП рджреЛ рдореИрдЯреНрд░реАрд╕ (рдмреНрд░рд╣реНрдорд╛рдВрдб, рдЕрдЧрд▓рд╛) рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВрдЧреЗред M_masterColor рд╡реИрд░рд┐рдПрдмрд▓ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕реЗрд▓ рдХреЗ рд░рдВрдЧ, рдЯрд╛рдЗрдорд░ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдорд░, рдмреНрд░рд╣реНрдорд╛рдВрдб рдЖрдХрд╛рд░ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рд▓рд┐рдП рднреА рдЙрдкрдпреЛрдЧреА рд╣реИред рд╣рдо рдЗрд╕реЗ рдмрд╕ рдХрд░реЗрдВрдЧреЗ:
  1. рд╢реБрд░реВ рд╣реБрдЖ рдирд╛рдо ()
  2. рдЯрд╛рдЗрдорд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЕрдВрддрд░рд╛рд▓ рдкрд░ рдШреВрдордирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ
  3. рд╕рдордп рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ (), рдирдпрд╛ рдЬреЗрдирд░реЗрд╢рди рдЪрд▓рд╛рдПрдВ ()
  4. рдпрд╣рд╛рдВ рд╣рдо рдмреВрд▓ рдЗрдЬрд╝рд▓рд╛рдЗрд╡ (рдкрдВрдХреНрддрд┐, рдХреЙрд▓) рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдЧрд▓реЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рднрд░рддреЗ рд╣реИрдВ
  5. рдмреНрд░рд╣реНрдорд╛рдВрдб рдХреЗ рдЖрдЧреЗ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд
  6. рдЕрдкрдбреЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рдЬреЗрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдПрдВ ()
  7. рдкреЗрдВрдЯ рдИрд╡реЗрдВрдЯ () рдХреЙрд▓ рдЧреНрд░рд┐рдб рдФрд░ рд╕реЗрд▓ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рддрд░реАрдХреЗ
  8. рдФрд░ рдЯрд╛рдЗрдорд░ рдЪрд▓рддреЗ рд╕рдордп рдЗрддрдирд╛ рд▓рдВрдмрд╛ рдФрд░ рдердХрд╛рдКред
  9. рдФрд░ рдЯрд╛рдЗрдорд░ рдЙрд╕ рдХреНрд╖рдг рддрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рдмреНрд░рд╣реНрдорд╛рдВрдб == рдЕрдЧрд▓рд╛ рдпрд╛ рд╕реНрдЯреЙрдкрдЧреИрдо () рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛


рдореИрдВ рдЗрд╕ рдкреВрд░реЗ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЗрд╕рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рд╣рд┐рд╕реНрд╕реЗ рдкрд░ - рдкреНрд░рддрд┐рдкрд╛рджрдиред рд╕рд┐рджреНрдзрд╛рдВрдд рдХреА рдПрдХ рдмрд┐рдЯред рдХреНрдпреВрдЯреА рдореЗрдВ, рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ QPainter рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╣реИ, рдЗрд╕рдореЗрдВ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЖрдк рдХреЗрд╡рд▓ рдЗрд╕рдХреЗ рд╕рд╛рде PaintEvent () рдореЗрдВ рд╡рд┐рдЬреЗрдЯ рдкрд░ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡реИрд╕реЗ, рдпрд╣рд╛рдБ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
void GameWidget::paintEvent(QPaintEvent *) { QPainter p(this); paintGrid(p); paintUniverse(p); } 


рд╣рдо рдФрд░ рдЧрд╣рд░реЗ рдЬрд╛рдПрдВрдЧреЗред рдпрд╣рд╛рдБ рд╣рдордиреЗ QPainter рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдпрд╛ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдВрдХ рдХреЛ PaintGrid () рдФрд░ paintUniverse () рд╡рд┐рдзрд┐рдпреЛрдВ рд╕реЗ рдкрд╛рд╕ рдХрд┐рдпрд╛ред рд╡реЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдореЙрдбрд▓ (рдмреНрд░рд╣реНрдорд╛рдВрдб рдореИрдЯреНрд░рд┐рдХреНрд╕) рдХрд╛ рдкреНрд░рддрд┐рдкрд╛рджрди рдХрд░рдиреЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рд╕рдм рдХреБрдЫ рдПрдХ рдШрдбрд╝реА рдХреА рддрд░рд╣ рд╣реИред рдЕрдм рдкреЗрдВрдЯрдЧреНрд░рд┐рдб () рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
 void GameWidget::paintGrid(QPainter &p) { QRect borders(0, 0, width()-1, height()-1); // borders of the universe QColor gridColor = m_masterColor; // color of the grid gridColor.setAlpha(10); // must be lighter than main color p.setPen(gridColor); double cellWidth = (double)width()/universeSize; // width of the widget / number of cells at one row for(double k = cellWidth; k <= width(); k += cellWidth) p.drawLine(k, 0, k, height()); double cellHeight = (double)height()/universeSize; // height of the widget / number of cells at one row for(double k = cellHeight; k <= height(); k += cellHeight) p.drawLine(0, k, width(), k); p.drawRect(borders); } 


рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ, рд╕рднреА рдмрд┐рдВрджреБ рдЬреЛ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЪрд┐рддреНрд░рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВред рдЕрдм рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рд╣рдорд╛рд░рд╛ "рдмреНрд░рд╣реНрдорд╛рдВрдб" рдХреИрд╕реЗ рдЦреАрдВрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ:
 void GameWidget::paintUniverse(QPainter &p) { double cellWidth = (double)width()/universeSize; double cellHeight = (double)height()/universeSize; for(int k=1; k <= universeSize; k++) { for(int j=1; j <= universeSize; j++) { if(universe[k][j] == true) { // if there is any sense to paint it qreal left = (qreal)(cellWidth*j-cellWidth); // margin from left qreal top = (qreal)(cellHeight*k-cellHeight); // margin from top QRectF r(left, top, (qreal)cellWidth, (qreal)cellHeight); p.fillRect(r, QBrush(m_masterColor)); // fill cell with brush of main color } } } } 


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

рд▓реЗрдХрд┐рди рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреИрд╕реЗ рджреЗрддреЗ рд╣реИрдВ? рдЬрд╛рд╣рд┐рд░ рд╣реИ, рд╣рдо keyPressEvent () рд╡рд┐рдзрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдореЗрдВ рдХреБрдЫ рдХрд░реЗрдВрдЧреЗред рдпрд╣рд╛рдВ рдЗрд╕рдХреА рд╕реВрдЪреА рджреА рдЧрдИ рд╣реИ:
 void GameWidget::mousePressEvent(QMouseEvent *e) { double cellWidth = (double)width()/universeSize; double cellHeight = (double)height()/universeSize; int k = floor(e->y()/cellHeight)+1; int j = floor(e->x()/cellWidth)+1; universe[k][j] = !universe[k][j]; update(); } 


рд╕реЗрд╡ / рдУрдкрди рдореИрдк


рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рджреЛ рдмрдЯрди рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ - рд╕рд╣реЗрдЬреЗрдВ / рд▓реЛрдб рдХрд░реЗрдВред рдЙрдирдХрд╛ рдХрд╛рд░реНрдп рдЧреЗрдо рдХрд╛рд░реНрдб рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЦреЛрд▓рдирд╛ рдФрд░ рд╕рд╣реЗрдЬрдирд╛ рд╣реИред рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реИ:


рдЕрдиреБрдорд╛рдирд┐рдд рдкреНрд░рд╛рд░реВрдк:
 [size] [dump] [red] [green] [blue] [interval] 


рдорд╛рдирдЪрд┐рддреНрд░ рдХрд╛ рдЖрдХрд╛рд░ GameWidget :: cellNumber () рдФрд░ GameWidget :: setCellNumber () рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдбрдВрдк GameWidget :: рдбрдВрдк () рдФрд░ GameWidget :: setDump () рд╣реИред
рд░рдВрдЧ - GameWidget :: MasterColor () рдФрд░ GameWidget :: setMasterColor ()ред
рдЕрдВрддрд░рд╛рд▓ GameWidget :: рдЕрдВрддрд░рд╛рд▓ () рдФрд░ GameWidget :: setInterval () рд╣реИред

рдореЗрдирд╡рд┐рдВрдбреЛ рдХреЗ рдХрдВрдзреЛрдВ рдкрд░ рдХреЗрд╡рд▓ рд▓рд┐рдЦрдиреЗ рдФрд░ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реА рд░рд╣рддрд╛ рд╣реИред рдореИрдВ рд▓реЛрдбрдирд╛рдо () рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░реВрдВрдЧрд╛:
 void MainWindow::loadGame() { QString filename = QFileDialog::getOpenFileName(this, tr("Open saved game"), QDir::homePath(), tr("Conway's Game Of Life File (*.life)")); if(filename.length() < 1) return; QFile file(filename); if(!file.open(QIODevice::ReadOnly)) return; QTextStream in(&file); int sv; in >> sv; ui->cellsControl->setValue(sv); game->setCellNumber(sv); QString dump=""; for(int k=0; k != sv; k++) { QString t; in >> t; dump.append(t+"\n"); } game->setDump(dump); int r,g,b; // RGB color in >> r >> g >> b; currentColor = QColor(r,g,b); game->setMasterColor(currentColor); // sets color of the dots QPixmap icon(16, 16); // icon on the button icon.fill(currentColor); // fill with new color ui->colorButton->setIcon( QIcon(icon) ); // set icon for button in >> r; // r will be interval number ui->iterInterval->setValue(r); game->setInterval(r); } 


рд░рдВрдЧ рдмреАрдирдиреЗ рд╡рд╛рд▓рд╛


рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рдмрддрд╛рдпрд╛ рд╣реИ - рдпрд╣ QCWDialog рдФрд░ GameWidget рд╡рд░реНрдЧ рдХреЗ рддрд░реАрдХреЛрдВ (рдКрдкрд░ рджрд░реНрд╢рд╛рдП рдЧрдП) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡реИрд╕реЗ, рдмрдЯрди рдХреЗ рдмрд╛рдИрдВ рдУрд░ рдкрд╛рда рдХреЗ рд░рдВрдЧ рд╕реЗ рднрд░рд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╡рд░реНрдЧ рд╣реИ рдЬрд┐рд╕реЗ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ QIcon рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ 16x16 QPixmap - рднрд░рд╛ рдорд╛рд╕реНрдЯрд░рдХреЙрд▓рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рдЬрд┐рд╕ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ


рдореИрдВрдиреЗ рдЯрд╛рдЗрдорд░ (рдЯрд╛рдЗрдорд░-> рд╕реНрдЯрд╛рд░реНрдЯ) () рд╢реБрд░реВ рдХрд░рдиреЗ рдпрд╛ рд╡рд┐рдЬреЗрдЯ (рдЕрдкрдбреЗрдЯ ()) рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдмрддрд╛рдпрд╛ - рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдЕрдВрдд рдореЗрдВ рдХреНрдпреВрдЯреА рдХреЗ рдкрд╛рд╕, рдореБрдЭреЗ рдпрд╣ рдХрд╣рдиреЗ рдореЗрдВ рдХреЛрдИ рдбрд░ рдирд╣реАрдВ рд╣реИ, рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреЗ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╕реЗ рдПрдХред

рдХреГрдкрдпрд╛ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рди рд▓рд┐рдЦреЗрдВ рдХрд┐ рдХреЛрд╢рд┐рдХрд╛рдПрдБ рдЖрдпрддрд╛рдХрд╛рд░ рд╣реИрдВ, рд╡рд░реНрдЧ рдирд╣реАрдВред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрд░реА рдЦрд┐рдЪрдбрд╝реА рднрд╛рд╖рд╛ рд╣реИ - рдореБрдЭреЗ рдЗрд╕реЗ QAbstractScrollArea рдореЗрдВ рд▓рдкреЗрдЯрдирд╛ рд╣реЛрдЧрд╛ - рд▓реЗрдХрд┐рди рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдореИрдВрдиреЗ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдЕрдВрдд рдореЗрдВ, рдХрд╛рдВрдЯреЗ рдФрд░ рдкреВрд▓ рдЕрдиреБрд░реЛрдз рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ - рдпрд╣ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ GitHub'e рдХреА рдореЗрдЬрдмрд╛рдиреА рдХрд░рддрд╛ рд╣реВрдВ))ред

рддрд╕реНрд╡реАрд░реЗрдВ рдФрд░ рдЙрджрд╛рд╣рд░рдг



рдиреАрд▓реЗ рд░рдВрдЧ рдХреЗ рд╕рд╛рде 50x50 рдХреНрд╖реЗрддреНрд░ рдкрд░ "рдорд╢реАрди рдЧрди" рдЧреНрд▓рд╛рдЗрдбрд░ред


100x100 рдХреНрд╖реЗрддреНрд░ рдкрд░ "рдорд╢реАрди рдЧрди" рдЧреНрд▓рд╛рдЗрдбрд░


рдХреЗрд╡рд▓ рдирд╛рд░рдВрдЧреА рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдорд╢реАрди рдЧрдиред

рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж


рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рд╕рднреА рдХрд╛ рдзрдиреНрдпрд╡рд╛рджред

рдПрдХ рдмрд╛рд░ рдлрд┐рд░ GitHub рдкрд░ рд╕реНрд░реЛрдд рдХреЛрдбред
рдЧреАрдердм рдкрд░ рдорд╢реАрдирдЧрди рд╕реЗ рдирдХреНрд╢рд╛: рдЬрд┐рд╕реНрдЯ ред

рдореИрдВ рдЖрдкрдХреЛ рд╕рдлрд▓рддрд╛ рдХреА рдХрд╛рдордирд╛ рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд - рдПрдХ рд╕рдлрд▓ рдпреБрд╡рддреА,
рдЗрд▓реНрдпрд╛ред

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


All Articles