рдХреНрдпреВрдЯреА рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ - рдбрд╛рд░реНрдХ рд╕рд╛рдЗрдбред рднрд╛рдЧ 1

рдкрд╣рд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВрдиреЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдХрд┐ рдореИрдВ рдврд╛рдВрдЪреЗ рдХреЗ рдлрд╛рдпрджреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ рдЬрд╛рди рд╕рдХрддрд╛ рд╣реВрдБред рдЖрдЬ рдореИрдВ рдЗрд╕рдХреЗ рдЕрдВрдзреЗрд░реЗ рдкрдХреНрд╖ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛, рдЦрд░рд╛рдм рджрд╕реНрддрд╛рд╡реЗрдЬред

рдХреЗрд╕ рдирдВрдмрд░ 1


рд╣рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рд╡рд┐рдВрдбреЛ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рджреГрд╢реНрдп рдФрд░ рдЙрд╕рдореЗрдВ рдореМрдЬреВрдж рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЖрдХрд╛рд░ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЧреЛрджреА рдХрд╣рддреА рд╣реИ, "QGraphicsView рд╡реНрдпреВрдкреЛрд░реНрдЯ рд╡рд┐рдЬреЗрдЯ рдХрд╛ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рд▓реЗрддрд╛ рд╣реИред" рдареАрдХ рд╣реИ, рдЪрд▓реЛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдЦрддреЗ рд╣реИрдВ:

mainWindow.h:
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QGraphicsScene> #include <QGraphicsEllipseItem> #include <QGraphicsView> class MainWindow : public QWidget { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private: bool eventFilter(QObject *, QEvent *); private: QGraphicsScene *m_scene; QGraphicsEllipseItem *m_elipse; QGraphicsView * graphicsView; }; #endif // MAINWINDOW_H 

mainWindow.cpp:
 #include "MainWindow.h" #include <QGridLayout> #include <QEvent> #include <QResizeEvent> MainWindow::MainWindow(QWidget *parent) : QWidget(parent) { setLayout(new QGridLayout()); graphicsView = new QGraphicsView(); layout()->addWidget(graphicsView); graphicsView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); graphicsView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); m_scene = new QGraphicsScene(); m_elipse = new QGraphicsEllipseItem(); m_scene->addItem(m_elipse); m_scene->setSceneRect(m_elipse->boundingRect()); graphicsView->setScene(m_scene); graphicsView->installEventFilter(this); } MainWindow::~MainWindow() { } bool MainWindow::eventFilter(QObject *, QEvent *event) { if(event->type() == QEvent::Resize ) { QResizeEvent *res = reinterpret_cast<QResizeEvent*>(event); m_elipse->setRect(0, 0, res->size().width(), res->size().height()); return true; } return false; } 

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

рдлрд┐рд░ рдмрджрд▓реЛ

  graphicsView->installEventFilter(this); 

рдкрд░
  graphicsView->viewport()->installEventFilter(this); 


рд╕рдВрдХрд▓рди, рд░рди - рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЕрдм рдЪрд▓рд┐рдП рд╕реАрди рдореЗрдВ рдлрд┐рд▓реНрдЯрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рд╕рдВрдХрд▓рди рдХрд░рддреЗ рд╣реИрдВ, рдЪрд▓рд╛рддреЗ рд╣реИрдВ рдФрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рджреЗрдЦрддреЗ рд╣реИрдВред

рдХреЗрд╕ рдирдВрдмрд░ 2


рд╣рдо рдорд╛рдЙрд╕ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рджреГрд╢реНрдп рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдШреВрдорддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдг рдФрд░ рдХрдХреНрд╖рд╛ рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
 bool MainWindow::eventFilter(QObject *, QEvent *event) { if(event->type() ==QEvent::MouseMove) { qDebug()<<event; return true; } return false; } 


рдирд┐рд░реНрдорд╛рддрд╛ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
 graphicsView->setMouseTracking(true); 


рдЦреИрд░, рд╣рдо рдЧреНрд░рд╛рдлрд╝рд┐рдХреНрд╕ рд╡реНрдпреВ рдореЗрдВ рдлрд╝рд┐рд▓реНрдЯрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рд╣рдо рд╕рдВрдХрд▓рди рдХрд░рддреЗ рд╣реИрдВ, рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╣рдо рд╡реНрдпреВрдкреЛрд░реНрдЯ рдореЗрдВ рдлрд╝рд┐рд▓реНрдЯрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рдм рдХреБрдЫ рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдЕрдм рд╣рдо рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

  if(event->type() ==QEvent::MouseMove) 

рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
  if(event->type() ==QEvent::GraphicsSceneMouseMove) 


рдФрд░ рджреГрд╢реНрдп рдореЗрдВ рдлрд┐рд▓реНрдЯрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред рдФрд░ рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╣рдо рдкрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдорд╛рдЙрд╕ рдЖрдВрджреЛрд▓рди рдХреЛ рдЯреНрд░реИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЬрд╛рдВрдЪ рдХреЗ рдирд┐рд╖реНрдХрд░реНрд╖


рдпрд╣ рдПрдХ рд╢реБрд░реБрдЖрдд рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдЕрдЬреАрдм рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддрд░реНрдХ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реИ: рдЕрд▓рдЧ рд╕реЗ рдкреНрд░рджрд░реНрд╢рди, рдФрд░ рдЕрд▓рдЧ рд╕реЗ рд░рдЪрдирд╛ред рдФрд░ рдЗрд╕рд▓рд┐рдП, рдЖрдХрд╛рд░ рдмрджрд▓рдиреЗ рд╡рд╛рд▓реА рдШрдЯрдирд╛ рджреГрд╢реНрдп рдореЗрдВ рдкреНрд░рд╕рд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдФрд░ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рд╡реНрдпреВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реНрдпреВрдкреЛрд░реНрдЯ рдкрд░ рд╕рдВрд░рдХреНрд╖рдг рд▓реЗрддрд╛ рд╣реИред рдЖрдк рдЗрд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдХреЗрд╕ рдирдВрдмрд░ 1 рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рд╕рд╛рде рдмрджрд▓реЗрдВ:

  if(event->type() == QEvent::Resize ) { QResizeEvent *res = reinterpret_cast<QResizeEvent*>(event); m_elipse->setRect(0, 0, res->size().width(), res->size().height()); } return false; 

рдпрд╛рдиреА рдШрдЯрдирд╛ рдХреЗ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ, рдлрд┐рд░ рд╣рдо рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рджреЗрдЦреЗрдВрдЧреЗред рдпрд╛рдиреА рдШрдЯрдирд╛ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░реНрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рдЖрдЧреЗ рд╡реНрдпреВрдкреЛрд░реНрдЯ рдореЗрдВ рдкреНрд░реЗрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рд▓реЗрдХрд┐рди рдкрд░реНрдпрд╛рдкреНрдд рдХрдореА рд╡реНрдпрд╡рд╣рд╛рд░ рдХреНрдпреВрдЯреА рдпрд╛ рд╕рд╣рдЬ рдШрдЯрдирд╛рдУрдВ рдХреЗ рдЖрдВрддрд░рд┐рдХ рддрд░реНрдХ рдХреЗ рдХрд╛рд░рдг рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХреЛрдб рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдШрдЯрдирд╛рдУрдВ рдХреЗ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХреЗ рджреГрд╢реНрдп рдкрд░ рд╡рд╛рдкрд╕ред рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рд╣реИ: рджреГрд╢реНрдп рдкрд░ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рд╡реНрдпреВ рдЗрд╡реЗрдВрдЯ рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд QGRaphisSceneEvent рдореЗрдВ рдмрджрд▓ рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд┐рд╢реЗрд╖ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдпрд╣ рдЙрдиреНрд╣реЗрдВ рдбреЙрдХ рдореЗрдВ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реИ рди рдХрд┐ рдПрдВрдЯреНрд░реА рдкреЙрдЗрдВрдЯ ( рдЗрд╡реЗрдВрдЯ рдпрд╛ рд╡реНрдпреВрдкреЛрд░реНрдЯ) )ред

рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рдореИрдВ рдЕрдВрддрд┐рдо рдХреНрд╖рдг рдкрд░ рдзреНрдпрд╛рди рджреВрдВрдЧрд╛: рдврд╛рдВрдЪреЗ рдХрд╛ рддрд░реНрдХ рдРрд╕рд╛ рд╣реИ рдХрд┐ рд╕рднреА рдмрд╛рд╣рд░реА рдШрдЯрдирд╛рдУрдВ рдХреЛ рджреГрд╢реНрдп рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╛рдиреА рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрдкрдирд╛ QEvent рд╣реИ рдЬрд┐рд╕реЗ рджреГрд╢реНрдп рдореЗрдВ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ Qt рдХреЗ рддрд░реНрдХ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ QGRaphicsSceneEvent рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рдПрдХ рдХрд╕реНрдЯрдо рдШрдЯрдирд╛ рдХрд╛ рдПрдХ рдПрдирд╛рд▓реЙрдЧ рдмрдирд╛рдирд╛ рд╣реИ, рдПрдХ рджреГрд╢реНрдп рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░рдиреЗ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рд▓рд┐рдЦреЗрдВ, рдЬрд┐рд╕реЗ QGraphicsView рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рдХрдХреНрд╖рд╛ рдореЗрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдареАрдХ рд╣реИ, рдЗрд╕ рд╕рдмрд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд QGraphicsView рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрдпреВрдИрд╡реЗрдВрдЯ рднреЗрдЬреЗрдВред

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

рд╡реИрд╕реЗ, рдПрдХ рд░реЗрдХ рднреА рд╣реИред рдЧреЛрджреА рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдЬреНрдпрд╛рдорд┐рддреАрдп рдЖрдпрд╛рдореЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдЬреНрдпрд╛рдорд┐рддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ рд╣рдо рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдВрдЧреЗред рд▓реЗрдХрд┐рди рди рдХреЗрд╡рд▓, рдШрдЯрдирд╛ рд╡рд┐рддрд░рдг рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рд╣реЛрдВрдЧреАред

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


All Articles