{"id":183432,"date":"2013-06-22T22:06:02","date_gmt":"2013-06-22T18:06:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=183432"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=183432","title":{"rendered":"<span class=\"post_title\">Qt Graphics View FramWork \u2014 \u0442\u0435\u043c\u043d\u0430\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430. \u0427\u0430\u0441\u0442\u044c 2<\/span>"},"content":{"rendered":"<div class=\"content html_format\">   \t\u0412 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/182614\/\">\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439<\/a> \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0438\u0437\u0443\u0447\u0430\u0442\u044c \u0442\u0435\u043c\u043d\u044b\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438. \u0413\u0434\u0435-\u0442\u043e \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u043d\u044b \u0434\u043b\u044f \u0432\u0441\u0435\u0433\u043e Qt, \u0430 \u0433\u0434\u0435-\u0442\u043e \u043f\u0440\u0438\u0441\u0443\u0449\u0438 \u0442\u043e\u043b\u044c\u043a\u043e Graphics View. \u041d\u043e \u0442\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435 \u0432\u0441\u0442\u0440\u0435\u0447\u0430 \u0441 \u043d\u0438\u043c\u0438 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0431\u0435\u0437\u0431\u043e\u043b\u0435\u0437\u043d\u0435\u043d\u043d\u043e.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h4>\u0414\u0435\u043b\u043e \u21163 <\/h4>\n<p>  \u041c\u044b \u0445\u043e\u0442\u0438\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0439 item, \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043f\u0438\u0448\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">MainWindow.h<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">class MainWindow : public QWidget {     Q_OBJECT      public:     explicit MainWindow(QWidget *parent = 0);     ~MainWindow(); private:     QGraphicsScene *m_scene;     QGraphicsRectItem *m_rect;     QGraphicsItem *m_cross;     QGraphicsView * graphicsView; }; <\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">MainWindow.cpp<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">class CrossItem: public QGraphicsItem {  public:     QRectF boundingRect() const     {         return QRectF(0, 0, 30*scale(), 30*scale());     }     void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)     {         Q_UNUSED(option) Q_UNUSED(widget);         painter-&gt;setPen(QColor(Qt::red));         painter-&gt;drawLine(10, 0, 20, 0);             painter-&gt;drawLine(20*scale(), 0*scale(), 20*scale(), 10*scale());             painter-&gt;drawLine(20, 10, 30, 10);             painter-&gt;drawLine(30, 10, 30, 20);             painter-&gt;drawLine(30, 20, 20, 20);             painter-&gt;drawLine(20, 20, 20, 30);         painter-&gt;drawLine(20, 30, 10, 30);             painter-&gt;drawLine(10, 30, 10, 20);             painter-&gt;drawLine(10, 20,  0, 20);             painter-&gt;drawLine( 0, 20,  0, 10);             painter-&gt;drawLine( 0, 10, 10, 10);             painter-&gt;drawLine(10, 10, 10, 0);     } };   MainWindow::MainWindow(QWidget *parent) :     QWidget(parent) {     setLayout(new QGridLayout());     graphicsView = new QGraphicsView();         layout()-&gt;addWidget(graphicsView);         graphicsView-&gt;setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);         graphicsView-&gt;setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);     m_scene = new QGraphicsScene();      m_cross = new CrossItem();         m_scene-&gt;addItem(m_cross); \/\/\t  m_cross-&gt;setScale(2);     m_rect = new QGraphicsRectItem(m_cross-&gt;boundingRect(), m_cross);         m_scene-&gt;addItem(m_rect);     m_scene-&gt;setSceneRect(m_rect-&gt;boundingRect());     graphicsView-&gt;setScene(m_scene); }  MainWindow::~MainWindow() { } <\/code><\/pre>\n<\/div>\n<\/div>\n<p>  \u041a\u043e\u043c\u043f\u043b\u0438\u0440\u0443\u0435\u043c, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c, \u0432\u0438\u0434\u0438\u043c \u0432\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0432 \u043a\u0440\u0435\u0441\u0442 \u043a\u0432\u0430\u0434\u0440\u0430\u0442. \u0420\u0430\u0437\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u043c \u0441\u0442\u0440\u043e\u0447\u043a\u0443, \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0438 \u0432\u0438\u0434\u0438\u043c \u043d\u0435\u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0435.<\/p>\n<p>  \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e:  <\/p>\n<pre><code class=\"cpp\">painter-&gt;drawLine(20*scale(), 0*scale(), 20*scale(), 10*scale()); <\/code><\/pre>\n<p>  \u0438  <\/p>\n<pre><code class=\"cpp\">return QRectF(0, 0, 30*scale(), 30*scale());<\/code><\/pre>\n<p>   \u2014 \u0433\u043e\u0440\u0435 \u043e\u0442 \u0443\u043c\u0430. <\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0430\u043a \u0445\u0440\u0430\u043d\u0438\u0442 QGraphicsItem \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f\u0445:<\/p>\n<pre><code class=\"cpp\">struct QGraphicsItemPrivate::TransformData {     QTransform transform;     qreal scale;     qreal rotation;     qreal xOrigin;     qreal yOrigin;     QList&lt;QGraphicsTransform *&gt; graphicsTransforms;     bool onlyTransform;      TransformData() :         scale(1.0), rotation(0.0),         xOrigin(0.0), yOrigin(0.0),         onlyTransform(true)     { }      QTransform computedFullTransform(QTransform *postmultiplyTransform = 0) const     {         if (onlyTransform) {             if (!postmultiplyTransform || postmultiplyTransform-&gt;isIdentity())                 return transform;             if (transform.isIdentity())                 return *postmultiplyTransform;             return transform * *postmultiplyTransform;         }          QTransform x(transform);         if (!graphicsTransforms.isEmpty()) {             QMatrix4x4 m;             for (int i = 0; i &lt; graphicsTransforms.size(); ++i)                 graphicsTransforms.at(i)-&gt;applyTo(&m);             x *= m.toTransform();         }         x.translate(xOrigin, yOrigin);         x.rotate(rotation);         x.scale(scale, scale);         x.translate(-xOrigin, -yOrigin);         if (postmultiplyTransform)             x *= *postmultiplyTransform;         return x;     } }; <\/code><\/pre>\n<p>  \u0412\u0441\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u0438 \u0431\u0435\u0441\u0445\u0438\u0442\u0440\u043e\u0441\u0442\u043d\u043e, \u043a\u0430\u043a \u043c\u044b\u0447\u0430\u043d\u0438\u0435 \u043a\u043e\u0440\u043e\u0432\u044b \u043d\u0430 \u043b\u0443\u0433\u0443.\u0418 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0441\u0446\u0435\u043d\u0430 \u0434\u0435\u0440\u0433\u0430\u0435\u0442 \u043c\u0435\u0442\u043e\u0434 <i>computedFullTransform<\/i> \u0438 \u0441\u043e\u0432\u0435\u0440\u0448\u0438\u0432 \u0435\u0449\u0435 \u043f\u0430\u0440\u0443 \u0448\u0430\u043c\u0430\u043d\u0441\u043a\u0438\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043f\u043e\u0434\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u0442 \u044d\u0442\u043e QPainter-\u0443. <br \/>  \u0422\u0443\u0442 \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u043d\u0430 \u0437\u0430\u043c\u0435\u0442\u043a\u0443, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0445\u0438\u0442\u0440\u043e\u0435 \u0441 \u0444\u043e\u0440\u043c\u043e\u0439 \u043d\u0430\u0448\u0435\u0433\u043e item-a, \u0442\u043e \u043d\u0430\u043c \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u044b<br \/>  <i>setScale<\/i>,<i>setPos<\/i>, <i>setRotation<\/i> \u0438 <i>setTransforms<\/i> \u0438 \u0431\u043e\u043b\u0435\u0435 \u043d\u0430\u043c \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0430\u0434\u043e.<\/p>\n<h4>\u0414\u0435\u043b\u043e \u21164<\/h4>\n<p>  \u0425\u043e\u0442\u0438\u043c \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043c\u044b\u0448\u0438 \u043f\u043e item-\u0443. \u0421\u0440\u0430\u0437\u0443 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0430\u044e \u2014 \u0433\u0440\u0430\u0431\u043b\u0438 \u0437\u0434\u0435\u0441\u044c \u0440\u0430\u0437\u043b\u043e\u0436\u0435\u043d\u044b \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0448\u0430\u0433\u0443. \u0418 \u0431\u0438\u043b\u0438 \u043e\u043d\u0438 \u043c\u0435\u043d\u044f \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u043d\u043e \u0438 \u043e\u0447\u0435\u043d\u044c \u0443\u043f\u043e\u0440\u043d\u043e. \u041d\u043e \u043f\u043e\u043b\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043c\u044b\u0442\u0430\u0440\u0441\u0442\u0432 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0443. \u041e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u044e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u0445  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u0435\u0440\u0435\u043f\u0438\u0448\u0435\u043c Mainwindow.cpp \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">#include &quot;MainWindow.h&quot; #include &lt;QGridLayout&gt; #include &lt;QGraphicsSceneHoverEvent&gt; #include &lt;QDebug&gt; class MyRect: public QGraphicsRectItem { public:     MyRect(const QRectF &rect, QGraphicsItem *parent=0):QGraphicsRectItem(rect, parent){} protected:     void hoverMoveEvent(QGraphicsSceneHoverEvent *event)     {         qDebug()&lt;&lt;&quot;rect&quot;&lt;&lt;event-&gt;pos();         QGraphicsRectItem::hoverMoveEvent(event);     } };  class CrossItem: public QGraphicsItem {  public:     QRectF boundingRect() const     {         return QRectF(0, 0, 30, 30);     }     void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)     {         Q_UNUSED(option) Q_UNUSED(widget);         painter-&gt;setPen(QColor(Qt::red));         painter-&gt;drawLine(10, 0, 20, 0);             painter-&gt;drawLine(20, 0, 20, 10);             painter-&gt;drawLine(20, 10, 30, 10);             painter-&gt;drawLine(30, 10, 30, 20);             painter-&gt;drawLine(30, 20, 20, 20);             painter-&gt;drawLine(20, 20, 20, 30);         painter-&gt;drawLine(20, 30, 10, 30);             painter-&gt;drawLine(10, 30, 10, 20);             painter-&gt;drawLine(10, 20,  0, 20);             painter-&gt;drawLine( 0, 20,  0, 10);             painter-&gt;drawLine( 0, 10, 10, 10);             painter-&gt;drawLine(10, 10, 10, 0);     } protected:     void hoverMoveEvent(QGraphicsSceneHoverEvent *event)     {         qDebug()&lt;&lt;&quot;cross&quot;&lt;&lt;event-&gt;pos();         QGraphicsItem::hoverMoveEvent(event);     } };   MainWindow::MainWindow(QWidget *parent) :     QWidget(parent) {     setLayout(new QGridLayout());     graphicsView = new QGraphicsView();         layout()-&gt;addWidget(graphicsView);         graphicsView-&gt;setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);         graphicsView-&gt;setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);     m_scene = new QGraphicsScene();      m_cross = new CrossItem();         m_rect = new MyRect(m_cross-&gt;boundingRect(), m_cross);     m_cross-&gt;setAcceptHoverEvents(true);         m_rect-&gt;setAcceptHoverEvents(true);     m_scene-&gt;addItem(m_cross);     m_scene-&gt;setSceneRect(m_rect-&gt;boundingRect());     graphicsView-&gt;setScene(m_scene); }  MainWindow::~MainWindow() { } <\/code><\/pre>\n<\/div>\n<\/div>\n<p>  \u041c\u044b \u0441\u043b\u0435\u0434\u0443\u0435\u043c \u043e\u0431\u0449\u0435\u0439 \u043b\u043e\u0433\u0438\u043a\u0435, \u0447\u0442\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0441\u0446\u0435\u043d\u044b \u2014 \u043f\u043e\u043b\u043d\u044b\u0435 \u0430\u043d\u0430\u043b\u043e\u0433\u0438 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439. \u041e \u0447\u0435\u043c \u043d\u0430\u043c \u0440\u0430\u0434\u043e\u0441\u0442\u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u0434\u043e\u043a\u0430 \u043f\u043e <i>QGraphicsSceneHoverEvent<\/i>. <\/p>\n<p>  \u041a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0438 \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0438 \u043c\u044b\u0448\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u0434\u043e\u0445\u043e\u0434\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043e \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430. \u041b\u0435\u0437\u0435\u043c \u0432 \u0434\u043e\u043a\u0443, \u0438 \u0433\u0434\u0435-\u0442\u043e \u043d\u0430 \u0437\u0430\u0434\u0432\u043e\u0440\u043a\u0430\u0445 \u043f\u0440\u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0437\u0430\u0447\u0443\u0445\u043e\u043d\u043d\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 <i>setAcceptHoverEvents<\/i> \u0447\u0438\u0442\u0430\u0435\u043c:<\/p>\n<blockquote><p>Parent items receive hover enter events before their children, and leave events after their children. The parent does not receive a hover leave event if the cursor enters a child, though; the parent stays \u00abhovered\u00bb until the cursor leaves its area, including its children&#8217;s areas.<\/p>\n<p>  If a parent item handles child events, it will receive hover move, drag move, and drop events as the cursor passes through its children, but it does not receive hover enter and hover leave, nor drag enter and drag leave events on behalf of its children.<\/p>\n<p>  A QGraphicsWidget with window decorations will accept hover events regardless of the value of acceptHoverEvents().<\/p><\/blockquote>\n<p>  \u0418\u0442\u0430\u043a, \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043f\u043e\u0442\u043e\u043c\u043a\u0430. \u041e\u0441\u043e\u0437\u043d\u0430\u0432 \u044d\u0442\u043e \u0438 \u043f\u0440\u0438\u043d\u044f\u0432 \u0432\u043e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0447\u0435\u0435 \u0438\u0449\u0435\u043c \u043c\u0435\u0442\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u043c \u043f\u043e\u043c\u043e\u0436\u0435\u0442.<br \/>   \u0418 \u0442\u0430\u043a\u043e\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f, \u044d\u0442\u043e <i>setFiltersChildEvents<\/i>(\u043d\u0435 \u043f\u0443\u0442\u0430\u0442\u044c \u0441\u0445\u043e\u0436\u0438\u043c <i>setHandlesChildEvents<\/i>, \u043d\u0430 \u0442\u043e\u043c \u043f\u0443\u0442\u0438 \u043d\u0430\u043c \u0441\u043b\u0430\u0432\u044b \u043d\u0435 \u043d\u0430\u0439\u0442\u0438). \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0435\u0433\u043e \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440:  <\/p>\n<pre><code class=\"cpp\">m_cross-&gt;setFiltersChildEvents(true);<\/code><\/pre>\n<p>  \u0410 \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0444\u0438\u043b\u044c\u0442\u0440 \u0432 \u043a\u043b\u0430\u0441\u0441 CrossItem:  <\/p>\n<pre><code class=\"cpp\">    bool sceneEventFilter(QGraphicsItem *watched, QEvent *event)     {         if(event-&gt;type() == QEvent::GraphicsSceneHoverMove)             qDebug()&lt;&lt;&quot;cross&quot;&lt;&lt;event;         return false;     } <\/code><\/pre>\n<p>  \u041a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c. \u0423\u0440\u0430! \u0417\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e!!!<\/p>\n<h4>\u0418\u0442\u043e\u0433<\/h4>\n<p>  \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e \u043f\u043e\u0434\u0432\u0435\u0441\u0442\u0438 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0438\u0442\u043e\u0433, \u043a\u0430\u043a \u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0441\u0435\u0439\u0447\u0430\u0441 \u0443 \u043c\u0435\u043d\u044f \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f. \u0421\u043a\u043e\u0440\u0435\u0435 \u044d\u0442\u043e \u043d\u0435\u0434\u043e\u0443\u043c\u0435\u043d\u0438\u0435 \u2014 \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0432 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0443\u0441\u0438\u043b\u0438\u044f \u043d\u0430 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c item-\u0430 \u043e\u0442 \u0432\u0441\u044f\u043a\u0438\u0445 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0439, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 Qt \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b\u0438 \u043d\u0430\u043c \u043e\u0447\u0435\u043d\u044c \u0441\u0442\u0440\u0430\u043d\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u043a item-\u0430\u043c. \u0425\u043e\u0442\u044f \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u0432\u044b\u0448\u0435 \u043f\u0440\u0438\u043c\u0435\u0440 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043a\u043e\u0440\u0435\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0441\u043b\u0443\u0447\u0430\u0435\u043c, \u043d\u043e \u043e\u0434\u043d\u043e\u0433\u043e \u0432\u0437\u0433\u043b\u044f\u0434\u0430 \u043d\u0430 \u0444\u043b\u0430\u0433\u0438 \u0432 <i>QGraphicsItem<\/i> \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0447\u0442\u043e\u0431 \u0441\u0438\u043b\u044c\u043d\u043e \u0437\u0430\u0434\u0443\u043c\u0430\u0442\u044c\u0441\u044f.    \t<\/p>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/183432\/\"> http:\/\/habrahabr.ru\/post\/183432\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">   \t\u0412 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/182614\/\">\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439<\/a> \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0438\u0437\u0443\u0447\u0430\u0442\u044c \u0442\u0435\u043c\u043d\u044b\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438. \u0413\u0434\u0435-\u0442\u043e \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u043d\u044b \u0434\u043b\u044f \u0432\u0441\u0435\u0433\u043e Qt, \u0430 \u0433\u0434\u0435-\u0442\u043e \u043f\u0440\u0438\u0441\u0443\u0449\u0438 \u0442\u043e\u043b\u044c\u043a\u043e Graphics View. \u041d\u043e \u0442\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435 \u0432\u0441\u0442\u0440\u0435\u0447\u0430 \u0441 \u043d\u0438\u043c\u0438 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0431\u0435\u0437\u0431\u043e\u043b\u0435\u0437\u043d\u0435\u043d\u043d\u043e.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-183432","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/183432","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=183432"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/183432\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=183432"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=183432"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=183432"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}