Шаг 232.
Библиотека Qt.
Пример размещения элементов на сцене

    На этом шаге рассмотрим пример размещения элементов на сцене, положение которых можно изменять при помощи мыши.

    На рис. 1 показано размещение четырех элементов на сцене.


Рис.1. Отображение элементов, положение которых можно изменять при помощи мыши

int main(int argc, char** argv)
{
    //создаем объект приложения app
    QApplication   app(argc, argv);
    //создаем объекты классов QGraphicsScene и QGraphicsView
    QGraphicsScene scene(QRectF(-100, -100, 300, 300));
    /*виджет view при создании получает адрес объекта scene,
    но в качестве альтернативы можно воспользоваться методом
    QGraphicsView::setScene()*/
    QGraphicsView  view(&scene);
    /*вызовами методов QGraphicsScene::addPixmap(),
    QGraphicsScene::addText() и QGraphicsScene::addLine() в сцену добавляются
    элементы растрового изображения, текста и линии*/
    QGraphicsPixmapItem* pPixmapItem =
        scene.addPixmap(QPixmap("koala.jpg"));
    /*для того чтобы все добавленные элементы можно было перемещать мышью,
    эта возможность активизируется передачей в метод setFlags() значения
    QGraphicsItem::ItemIsMoveable*/
    pPixmapItem->setFlags(QGraphicsItem::ItemIsMovable);
    QGraphicsTextItem* pTextItem =
        scene.addText("Передвигай нас с помощью мыши");
    pTextItem->setFlags(QGraphicsItem::ItemIsMovable);
    QGraphicsLineItem* pLineItem =
        scene.addLine(QLineF(-10, -10, -80, -80), QPen(Qt::red, 2));
    pLineItem->setFlags(QGraphicsItem::ItemIsMovable);
    создаем прямоугольный элемент
    QGraphicsRectItem* pRectItem = new QGraphicsRectItem();
    /*вызов метода setPen() устанавливает черный цвет пера
    для контурной линии элемента*/
    pRectItem->setPen(QPen(Qt::black));
    /*кисть, предназначенная для заливки фона элемента,
    получает зеленый цвет с помощью метода setBrush()*/
    pRectItem->setBrush(QBrush(Qt::green));
    //метод setRect() задает расположение и размеры прямоугольной области
    pRectItem->setRect(QRectF(-30, -30, 120, 80));
    pRectItem->setFlags(QGraphicsItem::ItemIsMovable);
    scene.addItem(pRectItem);
    /*вызовом метода show() сцена отображается в представлении
    и ее элементы становятся видимыми на экране*/
    view.show();
    return app.exec();
}

    Файлы приложения можно взять здесь.

    Элементы, подобно виджетам, могут содержать другие элементы, что позволяет осуществлять их группировку. Расположение элементов-потомков выполняется относительно предка, например, в прямоугольном элементе будет отображаться текст "Предок", который будет передвигаться вместе с этой областью при ее перемещении:

QGraphicsTextItem* pTextItem1 = scene.addText("Потомок");
pTextItem1->setParentItem(pRectItem);   

    Класс QGraphicsItem предоставляет возможность определения столкновений элементов. Это задача выполняется с помощью методов QGraphics::shape() и QGraphicsItem::collidesWith(). Если вы создаете свой класс элемента, то для определения столкновений необходимо будет перезаписать метод QGraphicsItem::shape(). Этот метод должен возвращать форму элемента в локальных координатах. Благодаря этому класс QGraphicsItem будет самостоятельно распознавать столкновения.

    На следующем шаге рассмотрим классы событий графического представления.




Предыдущий шаг Содержание Следующий шаг