Главная · Все классы · Основные классы · Классы по группам · Модули · Функции

Переход на графическое представление

Графическое представление обеспечивает поверхность для управления и взаимодействия с большим количеством созданных пользователем двумерных графических элементов, а также виджет для их визуализации с поддержкой масштабирования и вращения. Графическое представление было введено в Qt 4.2 и заменило своего предшественника, класс QCanvas. Для подробностей о графическом представлении смотрите Каркас графического представления.

Этот документ проводит по всем необходимым шагам, класс за классом, функцию за функцией переводя приложение с QCanvas на графическое представление.

Qt 4.2 предоставляет два полных примера приложений Q3Canvas переведённых на графическое представление:

Введение

В основном, Классы графического представления из Qt 4 и классы канвы из Qt 3 предоставляют похожую функциональность используя одинаковый дизайн. Вместо "канва", мы используем термин "сцена". Другими словами, имена классов и функций почти такие же как в Qt 3. Простейшими классами для перехода будут QCanvas и QCanvasView. Опыт показывает что больше всего времени тратится на перевод классов элементов, в зависимости от сложности классов QCanvasItem которые вы использовали раньше.

Это руководство по переводу будет подразумевать что вы уже перевели ваше приложение на Qt 4, использовав Q3Canvas. Если вы ещё не сделали это, в качестве первого шага запустите инструмент qt3to4 для вашего проекта. Этот инструмент автоматизирует наиболее трудоёмкую часть усилий по переходу.

Обычно требуются некоторые дополнительные шаги, прежде чем ваше приложение скомпилируется и запустится. Вы можете прочитать больше о процессе портирования в Переход на Qt 4.

Переход от Q3Canvas

QGraphicsScene является ближайшем эквивалентом для Q3Canvas. Есть некоторые заметные различия в новом API: Где классы Q3Canvas используют целочисленную точность, QGraphicsScene полностью основан на координатах с плавающей точкой, с графическими примитивами такими как QPointF вместо QPoint, QRectF вместо QRect и QPolygonF и QPainterPath. Область канвы определяется прямоугольником сцены, позволяя отрицательные координаты, в отличие от Q3Canvas, которая определяет только размер (QSize), и у которой верхний левый угол всегда (0, 0).

К тому же, больше нет явной поддержки плиток канвы; смотрите Перевод сцен с плитками для дополнительной информации. Кусочная индексная система была заменена неявно поддерживаемым внутренним BSP-деревом.

Таблица перехода

Q3CanvasQGraphicsScene
Q3Canvas::Q3Canvas()Больше нет конструктора, основанного наQPixmap, и концепция пластин пропала. Вы можете использовать QGraphicsScene::backgroundBrush для установки шаблона фона или переопределить QGraphicsScene::drawBackground() в подклассе QGraphicsScene (смотрите Перевод сцен с пластинами). В дополнение, геометрия QGraphicsScene предоставляется в виде полного QRectF. Вместо Q3Canvas(int width, int height), вы можете использовать QGraphicsScene(int top, int left, int width, int height).
Q3Canvas::allItems()QGraphicsScene::items() возвращает список всех объектов на сцене.
Q3Canvas::backgroundColor()Вы можете назначить цвет для фона с помощью свойств QGraphicsScene::backgroundBrush или QGraphicsView::backgroundBrush.
Q3Canvas::backgroundPixmap()Вы можете установить растровое изображение пластины для фона с помощью QGraphicsScene::backgroundBrush или QGraphicsView::backgroundBrush. Для большего контроля за позиционированием изображения, вы можете переопределить QGraphicsScene::drawBackground() или QGraphicsView::drawBackground().
Q3Canvas::chunkSize()Ближайшим эквивалентом размеру кусков в Q3Canvas является глубина BSP-дерева QGraphicsScene. QGraphicsScene назначает глубину автоматически, и размер каждого сегмента сцена зависит от этой глубины и QGraphicsScene::sceneRect(). Смотрите QGraphicsScene::itemIndexMethod.
Q3Canvas::collisions()QGraphicsScene предоставляет несколько способов для обнаружения столкновений элементов. ПерегруженнаяQGraphicsScene::items() возвращает элементы которые столкнулись с точкой, прямоугольником, полигоном или произвольным путём векторов (QPainterPath). Вы можете также вызывать QGraphicsScene::collidingItems() для определения столкновений с элементом.
Q3Canvas::drawArea()Функция QGraphicsScene::render() предоставляет оригинальное поведение Q3Canvas::drawArea(). Дополнительно вы можете передать прямоугольник источника для отрисовки только части сцены и прямоугольник приёмника для отрисовки на указанную область целевого устройства. QGraphicsScene::render() дополнительно может преобразовать исходный прямоугольник так, что бы он разместился в целевом прямоугольнике. Смотрите Печать
Q3Canvas::onCanvas()В графическом представлении нет эквивалента данной функции. Тем не менее вы можете скомбинировать QGraphicsScene::sceneRect() и QRectF::intersects():
 item->scene().sceneRect().intersects(item->sceneBoundingRect());
 item->mapToScene(item->shape()).intersects(item->scene().sceneRect());
Q3Canvas::rect()Его эквивалент QGraphicsScene::sceneRect() возвращает QRectF (координаты двойной точности). Его верхний левый угол может иметь произвольные координаты (Q3Canvas::rect().topLeft() всегда (0, 0)).
Q3Canvas::resize()Вместо него вы можете вызвать QGraphicsScene::setSceneRect(0, 0, width, height).
Q3Canvas::retune()Смотрите QGraphicsScene::itemIndexMethod. Вы можете настроить индексирование установкой подходящего sceneRect(). Оптимальная глубина BSP-дерева QGraphicsScene определяется автоматически.
Q3Canvas::setAdvancePeriod()В новом API нет концепции предварительного периода; вместо этого вы можете соединить QTimer::timeout() со слотом QGraphicsScene::advance() чтобы получить похожую функциональность. Это будет приводить к вызову функции QGraphicsItem::advance() всех элементов. Смотрите также QGraphicsItemAnimation.
Q3Canvas::setAllChanged()Вы можете вызвать QGraphicsScene::update() без аргументов.
Q3Canvas::setChanged()QGraphicsScene::update() вызывет перерисовку всей сцены или её частей.
Q3Canvas::setDoubleBuffering()Двойной буфер Q3Canvas' позволяет кэшировать содержимое сцены в координатах устройства (т.е., области просмотра). Вместо этого данный слой кэша был перемещён в вид; вы можете кэшировать фон QGraphicsScene с помощью QGraphicsView::setCacheMode(). QGraphicsView::resetCachedContent() перезагрузит области кэша, которые изменились.
Q3Canvas::tile()Смотрите Перевод сцен с плитками.
Q3Canvas::setTiles()Смотрите Перевод сцен с плитками.
Q3Canvas::setUnchanged()В графическом представлении ему нет эквивалента. Обычно этот вызов может быть вызван без побочных эффектов.
Q3Canvas::setUpdatePeriod()В новом API нет концепции периода обновления; вместо этого вы можете соединить QTimer::timeout() со слотом QGraphicsScene::update() чтобы получить похожую функциональность. Смотрите также QGraphicsItemAnimation.
Q3Canvas::size()QGraphicsScene::sceneRect().size() возвращает QSizeF, с двойной точностью координат.
Q3Canvas::validChunk()Что бы определить находится ли область внутри сцены или нет, вы можете скомбинировать QRectF::intersects() с QGraphicsScene::sceneRect().
Q3Canvas::resized()QGraphicsScene вырабатывает sceneRectChanged() когда изменяется прямоугольник сцены.
Q3Canvas::drawBackground()Вы можете переопределить QGraphicsScene::drawBackground() что бы отрисовывать фон сцены. Вы также можете переопределить QGraphicsView::drawBackground() что бы заменить этот фон если вам нужны разные фоны в разных видах.
Q3Canvas::drawForeground()Вы можете переопределить QGraphicsScene::drawForeground() что бы отрисовывать передний план сцены. Вы можете также переопределить QGraphicsView::drawForeground() чтобы заменить этот передний план если вам нужны различные передние планы для разных видов.

Перевод сцен с плитками

QGraphicsScene не предоставляет API для плиток. Тем не менее, вы можете получить похожее поведение отрисовывая растровые изображения в переопределённой функции QGraphicsScene::drawBackground().

Поддержка плиток Q3Canvas основана на предоставлении одного растрового изображения, содержащего плитки фиксированной ширины и высоты, и затем доступа к ним (чтение и замена пластин) по индексу. Плитки в растровом изображении упорядочены слева на право, снизу вверх.

0123
4567

С графическим представлением это растровое изображение может храниться как член подклассса QGraphicsScene. Три главные функции, которые составляют открытый API плиток, могут быть определены как новые члены этого класса. Вот один пример как реализовать поддержку плиток:

     class TileScene : public QGraphicsScene
     {
     public:
         ...

         void setTiles(const QPixmap &pixmap, int h, int v,
                       int tileHeight, int tileWidth);
         void setTile(int x, int y, int tilenum);

     private:
         QRect tileRect(int x, int y) const;
         QRect tileRect(int tileNum) const;

         QVector<QVector<int> > tiles;
         QPixmap tilePixmap;
         int tileW, tileH;
         int hTiles, vTiles;
     };

В зависимости от того как ваша сцена использует пластины, вы можете упростить этот подход. В данном примере мы попробуем воспроизвести поведение функций Q3Canvas.

Мы начинаем с создания подкласса QGraphicsScene ("TileScene"). В этом классе мы декларируем две функции для работы с плитками из Q3Canvas, а затем мы добавляем две вспомогательные функции, которые возвращают прямоугольник для определённой плитки в нашем растровом изображении плиток. Мы будем использовать двухмерный вектор целых чисел что бы отслеживать какие плитки должны быть использованы на какой части сцены.

     void TileScene::setTiles(const QPixmap &pixmap, int h, int v,
                              int tileHeight, int tileWidth)
     {
         tilePixmap = pixmap;
         tileW = tileWidth;
         tileH = tileHeight;
         hTiles = h;
         vTiles = v;

         tiles.resize(v);
         for (int y = 0; y < v; ++y)
             tiles[y].resize(h);
     }

В setTiles() мы сохраняем растровое изображение и свойства плитки как члены класса. Затем мы изменяем размер вектора плиток чтобы он совпадал с шириной и высотой нашей сетки пластин.

     void TileScene::setTile(int x, int y, int tilenum)
     {
         tiles[y][x] = tilenum;
         update(tileRect(x, y));
     }

Функция setTile() обновляет индекс плиток и затем обновляет соответствующий прямоугольник на сцене, вызывая tileRect().

     QRect TileScene::tileRect(int x, int y) const
     {
         return QRect(x * tileW, y * tileH, tileW, tileH);
     }

Первая функция tileRect() возвращает QRect для плитки на позиции (x, y).

     QRect TileScene::tileRect(int tileNum) const
     {
         int numHTiles = tilePixmap.width() / tileW;
         int numVTiles = tilePixmap.height() / tileH;
         return tileRect(tileNum % numHTiles, tileNum / numHTiles);
     }

Вторая функция tileRect() возвращает QRect для номера плитки. С этими функциями мы можем реализовать функцию drawBackground().

     void drawBackground(QPainter *painter, const QRectF &exposed)
     {
         for (int y = 0; y < vTiles; ++y) {
             for (int x = 0; x < hTiles; ++x) {
                 QRect destRect = tileRect(x, y);
                 if (exposed.intersects(destRect)) {
                     painter->drawPixmap(destRect, tilePixmap,
                                         tileRect(tiles[y][x]));
                 }
             }
         }
     }

В drawBackground(), мы перерисовываем все плитки, прямоугольники которых пересекаются с отображаемой области фона.

Переход от Q3CanvasView

Ближайший эквивалент для Q3CanvasView в графическом представлении называется QGraphicsView. В большинстве случаев это простейший класс для перевода. В дополнение ко всей предоставляемой функциональности Q3CanvasView, QGraphicsView включает некоторые новые полезные особенности. Вы можете прочитать об этом больше в документации по QGraphicsView.

Таблица перехода

Q3CanvasViewQGraphicsView
Q3CanvasView::Q3CanvasView()QGraphicsView предоставляют такие же конструкторы как и Q3CanvasView, но без аргументов имени и флагов. Вы можете установить имя вызвав setObjectName(), и флаги вызвав setWindowFlags().
Q3CanvasView::canvas()QGraphicsView::scene() возвращает сцену, которая связана с видом в данный момент. QGraphicsScene также предоставляет противоположную функцию, QGraphicsScene::views(), которая возвращает список видов, просматривающих сцену.
Q3CanvasView::inverseWorldMatrix()Вы можете QGraphicsView::matrix() и QMatrix::inverted(). QGraphicsView::mapToScene() и QGraphicsView::mapFromScene() позволяют преобразовывать фигуры области просмотра в фигуры сцены и наоборот.
Q3CanvasView::setCanvas()QGraphicsView::setScene().
Q3CanvasView::setWorldMatrix()QGraphicsView::setMatrix(), QGraphicsView::rotate(), QGraphicsView::scale(), QGraphicsView::shear() and QGraphicsView::translate().
Q3CanvasView::worldMatrix()QGraphicsView::matrix()
Q3CanvasView::drawContents()ФункцияQGraphicsView::drawBackground() отрисовывает фон, QGraphicsView::drawItems() отрисовывают элементы и QGraphicsView::drawForeground() отрисовывает передний план сцены в координатах сцены. Вы также можете переопределить эти функции в QGraphicsScene.

Другие различия

QGraphicsView может кэшировать видимое содержимое сцены, аналогично тому как Q3Canvas::setDoubleBuffering() может кэшировать все содержимое сцены. Вы можете вызвать QGraphicsView::setCacheMode() для настройки кэширования и QGraphicsView::resetCachedContent() аннулирует кэш.

Для улучшенной поддержки навигации вы можете установить якорь изменения размера или преобразования с помощью QGraphicsView::resizeAnchor и QGraphicsView::transformationAnchor. Это позволит вам легко поворачивать и масштабировать вид зафиксировав центр или мастабировать относительно позиции под курсором мыши. Также, если вы установите QGraphicsView::dragMode для вида, QGraphicsView предоставит выделение резиновой нитью или навигацию "нажми-и-тяни" с использованием курсоров OpenHandCursor и ClosedHandCursor.

Переход от Q3CanvasItem

Ближайшим эквивалентом для Q3CanvasItem в графическом представлении называется QGraphicsItem. Наследование от этого класса является обычной практикой, поэтому перевод Q3CanvasItem часто требует больше работы чем Q3Canvas и Q3CanvasView.

Q3CanvasItem стал проще для использования, проще для наследования и более мощным с QGraphicsItem. Ключевым отличаем от Q3CanvasItem заключается в продвижении событий и группах элементов, но вы также найдёте несколько новых удобных особенностей, таких как поддержка всплывающих подсказок, курсоров, трансформации элементов и перетаскивания. Вы можете прочитать всё о QGraphicsItem в его собственной документации.

Эта секция начинается с таблицы, которая показывает как перевести каждую функцию с Q3CanvasItem на QGraphicsItem. Сразу после этого, каждый стандартный подкласс Q3CanvasItem имеет собственную секцию.

Q3CanvasItemQGraphicsItem
Q3CanvasItem::advance()QGraphicsItem::advance() предоставляется для совместимости. QGraphicsScene::advance() вызывает QGraphicsItem::advance() для всех элементов. Смотрите также QTimeLine и QGraphicsItemAnimation.
Q3CanvasItem::animated()Нет эквивалента; все элементы продвигаются с помощью QGraphicsScene::advance().
Q3CanvasItem::boundingRectAdvanced()Нет эквивалента Вместо этого вы можете транслировать QGraphicsItem::boundingRect() (смотрите QRectF::translate()).
Q3CanvasItem::canvas()QGraphicsItem::scene()
Q3CanvasItem::collidesWith()QGraphicsItem::collidesWithItem() и QGraphicsItem::collidesWithPath().
Q3CanvasItem::collisions()QGraphicsItem::collidingItems() возвращает список всех элементов, которые столкнулись с элементом. Вы можете указать хотите ли вы быструю, грубую оценку столкновений между ограничивающими прямоугольниками или более медленное, более аккуратное с использованием фигур.
Q3CanvasItem::draw()QGraphicsItem::paint(). Смотрите также QStyleOptionGraphicsItem, QGraphicsScene::drawItems() и QGraphicsView::drawItems().
Q3CanvasItem::hide()QGraphicsItem::hide() или QGraphicsItem::setVisible(). QGraphicsItem видимы по-умолчанию; Q3CanvasItem - нет.
Q3CanvasItem::isActive()Нет эквивалента Чтобы добиться похожего поведения, вы можете добавить это свойство в собственный подкласс QGraphicsItem.
Q3CanvasItem::isVisible()QGraphicsItem::isVisible(). QGraphicsItems видимы по-умолчанию; Q3CanvasItem - нет.
Q3CanvasItem::move()Вы можете вызвать QGraphicsItem::setPos() для изменения позиции элемента.
Q3CanvasItem::rtti()QGraphicsItem::type() и qgraphicsitem_cast().
Q3CanvasItem::setActive()Нет эквивалента
Q3CanvasItem::setAnimated()Нет эквивалента; все элементы по-умолчанию "анимированы" (т.е., QGraphicsScene::advance() продвигает все элементы на сцене).
Q3CanvasItem::setCanvas()Вы можете вызвать QGraphicsScene::addItem(), или передать указатель на канву в конструкторе QGraphicsItem.
Q3CanvasItem::setVelocity()Нет эквивалента Вы можете добавить скорости по осям x и y как члены вашего класса и вызывать QGraphicsItem::moveBy(x, y) из QGraphicsItem::advance(). Смотрите QTimeLine и QGraphicsItemAnimation.
Q3CanvasItem::setVisible()QGraphicsItem::setVisible(). QGraphicsItems видимы по-умолчанию; Q3CanvasItem - нет.
Q3CanvasItem::setX()QGraphicsItem::setPos()
Q3CanvasItem::setY()QGraphicsItem::setPos()
Q3CanvasItem::setXVelocity()Нет эквивалента
Q3CanvasItem::setYVelocity()Нет эквивалента
Q3CanvasItem::setZ()QGraphicsItem::setZValue()
Q3CanvasItem::show()QGraphicsItem::show() или QGraphicsItem::setVisible(). QGraphicsItem видимы по-умолчанию; Q3CanvasItem - нет.
Q3CanvasItem::xVelocity()Нет эквивалента
Q3CanvasItem::yVelocity()Нет эквивалента

Q3CanvasPolygonalItem

Ближайший эквивалент для Q3CanvasPolygonalItem в графическом представлении называется QAbstractGraphicsShapeItem. В отличае от Q3CanvasPolygonalItem, он не определяет точки области (Q3CanvasPolygonalItem::areaPoints()); вместо этого геометрия каждого элемента хранится в качестве члена подклассов.

Функция Q3CanvasPolygonalItem::drawShape() больше не доступна; вместо неё вы можете установить перо и карандаш из QGraphicsItem::paint().

Q3CanvasPolygonalItemQAbstractGraphicsShapeItem
Q3CanvasPolygonalItem::areaPoints()вместо этого геометрия каждого элемента хранится в качестве члена соответствующего подкласса.
Q3CanvasPolygonalItem::areaPointsAdvanced()Нет эквивалента; вместо этого вы можете использовать QPolygonF::translate() или QPainterPath::translate().
Q3CanvasPolygonalItem::drawShape()QGraphicsItem::paint(). Вы можете установить карандаш и перо внутри данной функции.
Q3CanvasPolygonalItem::invalidate()Вызывайте QGraphicsItem::prepareGeometryChange() перед изменением геометрии элемента.
Q3CanvasPolygonalItem::isValid()Нет эквивалента; геометрия элемента всегда в годном состоянии.
Q3CanvasPolygonalItem::winding()Эта функция полезна только для элементов полигонов и путей; смотрите QGraphicsPolygonItem::fillRule(), и QPainterPath::fillRule() для QGraphicsPathItem.

Q3CanvasEllipse

Ближайший эквивалент для Q3CanvasEllipse в графическом представлении называется QGraphicsEllipseItem. Наиболее заметное отличие от QGraphicsEllipseItem в том, что эллипс больше не отрисовывается с центром в его позиции; вместо этого он рисуется ограниченным QRectF также как QPainter::drawEllipse().

Для совместимости вы можете сдвинуть эллипс вверх и влево чтобы сохранить эллипс отцентрированным. Пример:

         // Before
         Q3CanvasEllipse ellipse(10, 10);

         // After
         QGraphicsEllipseItem ellipse(-5, -5, 10, 10);

Замечание: QGraphicsEllipseItem использует QAbstractGraphicsShapeItem::pen() для внешних линий там, где Q3CanvasEllipse не использует Q3CanvasPolygonalItem::pen().

Q3CanvasEllipseQGraphicsEllipseItem
Q3CanvasEllipse::angleLength()QGraphicsEllipseItem::spanAngle()
Q3CanvasEllipse::angleStart()QGraphicsEllipseItem::startAngle()
Q3CanvasEllipse::setAngles()QGraphicsEllipseItem::setStartAngle() и QGraphicsEllipseItem::setSpanAngle()
Q3CanvasEllipse::setSize()QGraphicsEllipseItem::setRect()

Q3CanvasLine

Ближайший эквивалент для Q3CanvasLine в графическом представлении называется QGraphicsLineItem.

Q3CanvasLineQGraphicsLineItem
Q3CanvasLine::endPoint()QGraphicsLineItem::line() и QLineF::p2()
Q3CanvasLine::setPoints()QGraphicsLineItem::setLine()
Q3CanvasLine::startPoint()QGraphicsLineItem::line() и QLineF::p1()

Q3CanvasPolygon

Ближайший эквивалент для Q3CanvasPolygon в графическом представлении называется QGraphicsPolygonItem.

Q3CanvasPolygonQGraphicsPolygonItem
Q3CanvasPolygon::areaPoints()QGraphicsPolygonItem::polygon() и QGraphicsItem::mapToParent()
Q3CanvasPolygon::points()QGraphicsPolygonItem::polygon()
Q3CanvasPolygon::setPoints()QGraphicsPolygonItem::setPolygon()

Q3CanvasSpline

Ближайший эквивалент для Q3CanvasSpline в графическом представлении называется QGraphicsPathItem. Этот элемент может быть использован для описания любого типа пути, поддерживаемого QPainter.

Q3CanvasSpline берёт свои контрольные точки в качестве Q3PointArray, но QPainterPath оперирует последовательностью вызовов QPainterPath::moveTo() и QPainterPath::cubicTo(). Вот как вы можете преобразовать кривую Безье Q3PointArray в QPainterPath:

     static QPainterPath fromControlPoints(const Q3PointArray &pa)
     {
         QPainterPath path;
         path.moveTo(pa[0]);
         for (int i = 1; i < pa.size(); i += 3)
             path.cubicTo(pa[i], pa[(i + 1) % pa.size()], pa[(i + 2) % pa.size()]);
         return path;
     }

Замечание: QGraphicsPathItem использует QAbstractGraphicsShapeItem::pen() для внешних линий там, где Q3CanvasSpline не использует Q3CanvasPolygonalItem::pen().

Q3CanvasSplineQGraphicsPathItem
Q3CanvasSpline::closed()Нет эквивалента Вы можете вызвать QPainterPath::closeSubPath() что бы явно закрыть путь.

Q3CanvasRectangle

Ближайший эквивалент для Q3CanvasRectangle в графическом представлении называется QGraphicsRectItem.

Q3CanvasRectangleQGraphicsRectItem
Q3CanvasRectangle::height()QGraphicsRectItem::rect() и QRectF::height()
Q3CanvasRectangle::setSize()QGraphicsRectItem::setRect()
Q3CanvasRectangle::size()QGraphicsRectItem::rect() и QRectF::size()
Q3CanvasRectangle::width()QGraphicsRectItem::rect() и QRectF::width()
Q3CanvasRectangle::chunks()Нет эквивалента

Q3CanvasSprite

Q3CanvasSprite это класс элемента, которые в наибольшей степени отличается от своего предшественника Q3Canvas. Ближайшим подобием Q3CanvasSprite в графическом представлении является QGraphicsPixmapItem.

Q3CanvasSprite поддерживает анимированные растровые изображения; тем не менее QGraphicsPixmapItem является элементом с простым однокадровым растровым изображением. Если всё что вам нужно это растровое изображение, то переход является простым. Если вам требуется поддержка анимации, то потребуется дополнительная работа; в данном случае нет прямого подхода для перехода.

Для примера Пример Ported Asteroids, используется подкласс QGraphicsPixmapItem для замещения Q3CanvasSprite, храня список изображений и счётчик кадров. Анимация происходит в QGraphicsItem::advance().

Q3CanvasPixmap, Q3CanvasPixmapArray

Эти классы были убраны из API. Вы можете использовать QPixmap вместо Q3CanvasPixmap и QList вместо Q3CanvasPixmapArray.

Q3CanvasPixmapArray обеспечивает удобство для загрузки последовательности изображений или масок с использованием пути с подстановочными знаками (смотрите Q3CanvasPixmapArray::readPixmaps() и Q3CanvasPixmapArray::readCollisionMasks()). Чтобы добиться похожей функциональности с использованием графического представления, вы можете загружать изображения с использованием QDir:

             wildcardPath.replace("%1", "*");
             QFileInfo fi(wildcardPath);

             QList<QPixmap> frames;
             foreach (QString entry, QDir(fi.path(), fi.fileName()).entryList())
                 frames << QPixmap(fi.path() + "/" + entry);

Q3CanvasText

В графическом представлении Q3CanvasText был разделён на два кла: QGraphicsSimpleTextItem и QGraphicsTextItem. Для перехода вполне подходит QGraphicsSimpleTextItem. QGraphicsTextItem предоставляет дополнительные особенности структурирования документа, похожие на возможности QTextEdit, и также позволяет взаимодействие (т.е., редактирование и выделение).

Q3CanvasTextQGraphicsSimpleTextItem
Q3CanvasText::color()QGraphicsSimpleTextItem::pen().
Q3CanvasText::setColor()QGraphicsSimpleTextItem::setPen().
Q3CanvasText::textFlags()Вместо этого используйте QGraphicsTextItem.

Q3CanvasItemList

Вместо этого используйте QList.


Copyright © 2008 Trolltech Торговые марки
Qt 4.3.5