Фреймворк графического представления
Графическое представление предоставляет поверхность для управления и взаимодействия с большим количеством пользовательских 2D графических элементов и виджет представления для визуализации элементов с поддержкой масштабирования и поворота.
Фреймворк включает архитектуру распространения событий, которая позволяет точные возможности взаимодействия с двойной точностью для элементов на сцене. Элементы могут обрабатывать события нажатия клавиш, нажатия, перемещения, отпускания мыши и двойного щелчка, а также отслеживать перемещение мыши.
Графическое представление использует дерево BSP (бинарное разбиение пространства) для очень быстрого обнаружения элементов, и в результате может визуализировать большие сцены в реальном времени, даже с миллионами элементов.
Графическое представление было представлено в Qt 4.2, заменив свой предшественник QCanvas.
Темы:
Архитектура графического представления
Графическое представление предоставляет предметно-ориентированный подход к программированию модель-представление, аналогично удобным классам InterView QTableView, QTreeView и QListView. Несколько представлений могут наблюдать за одной сценой, и сцена содержит элементы различных геометрических форм.
Сцена
QGraphicsScene предоставляет сцену для графического представления. Сцена имеет следующие обязанности:
- Предоставление быстрого интерфейса для управления большим количеством элементов
- Распространение событий на каждый элемент
- Управление состоянием элемента, таким как обработка выделения и фокуса
- Предоставление функциональности рендеринга без преобразований; в основном для печати
Сцена служит контейнером для объектов QGraphicsItem. Элементы добавляются в сцену с помощью вызова QGraphicsScene::addItem(), а затем извлекаются с помощью одной из многочисленных функций поиска элементов. QGraphicsScene::items() и ее перегрузки возвращают все элементы, содержащиеся в или пересекающиеся с точкой, прямоугольником, многоугольником или общей векторной траекторией. QGraphicsScene::itemAt() возвращает самый верхний элемент в определенной точке. Все функции поиска элементов возвращают элементы в порядке убывания стека (т. е. первый возвращаемый элемент — самый верхний, а последний — самый нижний).
QGraphicsScene scene; QGraphicsRectItem *rect = scene.addRect(QRectF(0, 0, 100, 100)); QGraphicsItem *item = scene.itemAt(50, 50, QTransform());
QGraphicsScene's архитектура распространения событий планирует события сцены для доставки элементам, а также управляет распространением между элементами. Если сцена получает событие нажатия мыши в определенной позиции, сцена передает событие тому элементу, который находится в этой позиции.
QGraphicsScene также управляет определенными состояниями элементов, такими как выделение и фокус элемента. Вы можете выделять элементы на сцене, вызывая QGraphicsScene::setSelectionArea(), передавая произвольную форму. Эта функциональность также используется в качестве основы для выделения резиновой лентой в QGraphicsView. Чтобы получить список всех выделенных в данный момент элементов, вызовите QGraphicsScene::selectedItems(). Другое состояние, управляемое QGraphicsScene, — это наличие или отсутствие фокуса ввода с клавиатуры у элемента. Вы можете установить фокус на элемент, вызвав QGraphicsScene::setFocusItem() или QGraphicsItem::setFocus или получить текущий элемент фокуса, вызвав QGraphicsScene::focusItem().
Наконец, QGraphicsScene позволяет вам рендерить части сцены в устройство рисования с помощью функции QGraphicsScene::render(). Вы можете узнать больше об этом в разделе «Печать» в этой документации.
Представление
QGraphicsView предоставляет виджет представления, который визуализирует содержимое сцены. Вы можете прикрепить несколько представлений к одной сцене, чтобы предоставить несколько областей просмотра одного и того же набора данных. Виджет представления — это область прокрутки, и предоставляет полосы прокрутки для навигации по большим сценам. Чтобы включить поддержку OpenGL, вы можете установить QOpenGLWidget в качестве области просмотра, вызвав QGraphicsView::setViewport().
QGraphicsScene scene; myPopulateScene(&scene); QGraphicsView view(&scene); view.show();
Представление получает события ввода с клавиатуры и мыши и преобразует их в события сцены (преобразуя используемые координаты в координаты сцены, если это необходимо), прежде чем отправлять события визуализированной сцене.
Используя свою матрицу преобразования, QGraphicsView::transform(), представление может преобразовывать систему координат сцены. Это позволяет расширенные функции навигации, такие как масштабирование и поворот. Для удобства QGraphicsView также предоставляет функции для преобразования между координатами представления и сцены: QGraphicsView::mapToScene() и QGraphicsView::mapFromScene().
Элемент
QGraphicsItem — базовый класс для графических элементов в сцене. Графическое представление предоставляет несколько стандартных элементов для типичных форм, таких как прямоугольники (QGraphicsRectItem), эллипсы (QGraphicsEllipseItem) и элементы текста (QGraphicsTextItem), но наиболее мощные возможности QGraphicsItem доступны при создании пользовательского элемента. Среди прочего, QGraphicsItem поддерживает следующие возможности:
- События нажатия, перемещения, отпускания и двойного щелчка мыши, а также события наведения курсора мыши, события колесика мыши и события контекстного меню.
- Фокус ввода с клавиатуры и события клавиш
- Перетаскивание
- Группирование, как через родительско-детские отношения, так и с QGraphicsItemGroup
- Обнаружение столкновений
Элементы существуют в локальной системе координат, и, как и QGraphicsView, также предоставляют множество функций для отображения координат между элементом и сценой, а также от элемента к элементу. Также, как и QGraphicsView, он может преобразовывать свою систему координат с помощью матрицы: QGraphicsItem::transform(). Это полезно для поворота и масштабирования отдельных элементов.
Элементы могут содержать другие элементы (дочерние элементы). Преобразования родительских элементов наследуются всеми его дочерними элементами. Однако независимо от накопленного преобразования элемента, все его функции (например, QGraphicsItem::contains(), QGraphicsItem::boundingRect(), QGraphicsItem::collidesWith()) все равно работают в локальных координатах.
QGraphicsItem поддерживает обнаружение столкновений через функцию QGraphicsItem::shape() и QGraphicsItem::collidesWith(), которые являются виртуальными функциями. Возвращая форму элемента в виде локальной координаты QPainterPath из QGraphicsItem::shape(), QGraphicsItem будет обрабатывать все обнаружение столкновений за вас. Если вы хотите предоставить собственное обнаружение столкновений, вы можете переопределить QGraphicsItem::collidesWith().
Классы в фреймворке графического представления
Эти классы предоставляют фреймворк для создания интерактивных приложений.
Общий базовый класс для всех элементов с контурами |
|
Представляет якорь между двумя элементами в QGraphicsAnchorLayout |
|
Макет, где можно привязывать виджеты друг к другу в представлении графики |
|
Базовый класс для всех графических эффектов |
|
Эллипс, который можно добавить в QGraphicsScene |
|
Шаблон сетки для управления виджетами в представлении графики |
|
Базовый класс для всех графических элементов в QGraphicsScene |
|
Контейнер, который обрабатывает группу элементов как один |
|
Базовый класс для всех макетов в представлении графики |
|
Может быть унаследован, чтобы позволить вашим пользовательским элементам управляться макетами |
|
Линия, которую можно добавить в QGraphicsScene |
|
Горизонтальный или вертикальный макет для управления виджетами в представлении графики |
|
Базовый класс для всех графических элементов, которые требуют сигналов, слотов и свойств |
|
Элемент пути, который можно добавить в QGraphicsScene |
|
Элемент пиксельной карты, который можно добавить в QGraphicsScene |
|
Многоугольник, который можно добавить в QGraphicsScene |
|
Прокси-слой для встраивания QWidget в QGraphicsScene |
|
Прямоугольник, который можно добавить в QGraphicsScene |
|
Поверхность для управления большим количеством 2D графических элементов |
|
События контекстного меню в рамках фреймворка графического представления |
|
События перетаскивания и размещения в рамках фреймворка графического представления |
|
Базовый класс для всех событий, связанных с представлением графики |
|
События при запросе всплывающей подсказки |
|
События наведения указателя в рамках фреймворка графического представления |
|
События мыши в рамках фреймворка графического представления |
|
События перемещения виджетов в рамках фреймворка графического представления |
|
События изменения размера виджетов в рамках фреймворка графического представления |
|
События колеса мыши в рамках фреймворка графического представления |
|
Простой элемент текста с путем, который можно добавить в QGraphicsScene |
|
QGraphicsItem, который может использоваться для отрисовки содержимого SVG-файлов |
|
Элемент текста, который можно добавить в QGraphicsScene для отображения форматированного текста |
|
Абстрактный базовый класс для построения расширенных преобразований над QGraphicsItems |
|
Виджет для отображения содержимого QGraphicsScene |
|
Базовый класс для всех элементов виджетов в QGraphicsScene |
|
Используется для описания параметров, необходимых для рисования QGraphicsItem |
Система координат представления графики
Представление графики основано на декартовой системе координат; положение и геометрия элементов на сцене представлены набором из двух чисел: координата x и координата y. При наблюдении сцены с помощью непрообразованного представления одна единица на сцене соответствует одному пикселю на экране.
Примечание: Система координат с обращенной осью Y (где y растет вверх) не поддерживается, так как представления графики используют систему координат Qt.
В представлении графики используются три эффективных системы координат: координаты элемента, координаты сцены и координаты представления. Для упрощения реализации представление графики предоставляет удобные функции, которые позволяют отображать координаты между тремя системами координат.
При отрисовке координаты сцены представления графики соответствуют логическим координатам QPainter, а координаты представления — тем же, что и устройства. В документации по системе координат вы можете прочитать об отношениях между логическими и устройствами.
Координаты элемента
Элементы существуют в своей собственной локальной системе координат. Их координаты обычно центрированы вокруг центральной точки (0, 0), и это также центр всех преобразований. Геометрические примитивы в системе координат элемента часто называются точками элемента, линиями элемента или прямоугольниками элемента.
При создании пользовательского элемента координаты элемента — всё, о чём вам нужно беспокоиться; QGraphicsScene и QGraphicsView выполнят все преобразования за вас. Это упрощает реализацию пользовательских элементов. Например, если вы получаете событие нажатия мыши или ввод перетаскивания, положение события задаётся в координатах элемента. Виртуальная функция QGraphicsItem::contains(), которая возвращает true, если определённая точка находится внутри вашего элемента, и ложь в противном случае, принимает аргумент точки в координатах элемента. Аналогично, прямоугольник ограничителя и форма элемента задаются в координатах элемента.
Положение элемента — это координата центральной точки элемента в системе координат родительского элемента; иногда называется координатами родительского элемента. Сцена в этом смысле рассматривается как «родитель» для всех элементов без родителя. Положение элементов верхнего уровня задаётся в координатах сцены.
Координаты дочерних элементов относительны к координатам родительского элемента. Если дочерний элемент не преобразован, разница между координатами дочернего элемента и родительского элемента такая же, как расстояние между элементами в координатах родительского элемента. Например: если дочерний элемент, который не преобразован, расположен точно в центре родительского элемента, тогда системы координат обоих элементов будут идентичны. Однако если положение дочернего элемента (10, 0), то точка дочернего элемента (0, 10) будет соответствовать точке родительского элемента (10, 10).
Поскольку положение и преобразование элементов относительны к родителю, координаты дочерних элементов не изменяются при преобразовании родительского элемента, хотя преобразование родительского элемента неявным образом преобразует дочерний элемент. В приведенном выше примере, даже если родительский элемент повернут и изменён по масштабу, точка дочернего элемента (0, 10) всё равно будет соответствовать точке родительского элемента (10, 10). Однако относительно сцены дочерний элемент будет следовать преобразованию и положению родителя. Если родительский элемент масштабируется (2x, 2x), положение дочернего элемента будет в координатах сцены (20, 0), а его точка (10, 0) будет соответствовать точке (40, 0) на сцене.
Кроме QGraphicsItem::pos(), функции QGraphicsItem работают в координатах элемента, независимо от элемента или преобразования любого из его родителей. Например, прямоугольник ограничителя элемента (т. е. QGraphicsItem::boundingRect()) всегда задаётся в координатах элемента.
Координаты сцены
Сцена представляет собой базовую систему координат для всех её элементов. Система координат сцены описывает положение каждого элемента верхнего уровня, а также служит основой для всех событий сцены, передаваемых в сцену из представления. Каждый элемент на сцене имеет координаты в системе сцены и ограничивающий прямоугольник (QGraphicsItem::scenePos(), QGraphicsItem::sceneBoundingRect()), помимо своих локальных координат элемента и ограничивающего прямоугольника. Координаты в системе сцены описывают положение элемента в координатах сцены, а ограничивающий прямоугольник сцены служит основой для того, как QGraphicsScene определяет, какие области сцены изменились. Изменения в сцене передаются через сигнал QGraphicsScene::changed(), и аргументом является список прямоугольников сцены.
Координаты представления
Координаты представления — это координаты виджета. Каждая единица в координатах представления соответствует одному пикселю. Особенность этой системы координат заключается в том, что она относительна к виджету или области просмотра и не зависит от наблюдаемой сцены. Левый верхний угол области просмотра QGraphicsView всегда (0, 0), а правый нижний угол всегда (ширина области просмотра, высота области просмотра). Все события мыши и события перетаскивания изначально принимаются в координатах представления, и вам необходимо преобразовать эти координаты в координаты сцены, чтобы взаимодействовать с элементами.
Преобразование координат
Часто при работе с элементами сцены полезно преобразовывать координаты и произвольные фигуры со сцены на элемент, с элемента на элемент или из представления в сцену. Например, когда вы щелкаете мышкой в области просмотра QGraphicsView, вы можете спросить сцену, какой элемент находится под курсором, вызвав QGraphicsView::mapToScene(), за которым следует QGraphicsScene::itemAt(). Если вы хотите узнать, где в области просмотра находится элемент, вы можете вызвать QGraphicsItem::mapToScene() на элементе, а затем QGraphicsView::mapFromScene() на представлении. Наконец, если вы хотите найти элементы, находящиеся внутри эллипса представления, вы можете передать QPainterPath в mapToScene(), а затем передать преобразованный путь в QGraphicsScene::items().
Вы можете преобразовывать координаты и фигуры в элемент и из элемента сцены, вызвав QGraphicsItem::mapToScene() и QGraphicsItem::mapFromScene(). Вы также можете преобразовать в родительский элемент, вызвав QGraphicsItem::mapToParent() и QGraphicsItem::mapFromParent(), или между элементами, вызвав QGraphicsItem::mapToItem() и QGraphicsItem::mapFromItem(). Все функции преобразования могут преобразовывать точки, прямоугольники, многоугольники и пути.
Те же функции преобразования доступны в представлении для преобразования в сцену и из сцены. QGraphicsView::mapFromScene() и QGraphicsView::mapToScene(). Чтобы преобразовать из представления в элемент, сначала преобразуйте в сцену, а затем из сцены в элемент.
Основные возможности
Масштабирование и поворот
QGraphicsView поддерживает те же аффинные преобразования, что и QPainter, через QGraphicsView::setMatrix(). Применяя преобразование к представлению, вы можете легко добавить поддержку таких функций навигации, как масштабирование и поворот.
Вот пример того, как реализовать слоты масштабирования и поворота в подклассе QGraphicsView:
class View : public QGraphicsView
{
Q_OBJECT
...
public slots:
void zoomIn() { scale(1.2, 1.2); }
void zoomOut() { scale(1 / 1.2, 1 / 1.2); }
void rotateLeft() { rotate(-10); }
void rotateRight() { rotate(10); }
...
}; Эти слоты можно подключить к QToolButtons с включенным autoRepeat.
QGraphicsView сохраняет центр представления выровненным при преобразовании представления.
См. также пример Упругие узлы для кода, который показывает, как реализовать базовые функции масштабирования.
Печать
Графическое представление предоставляет печать одной строки через свои функции отрисовки QGraphicsScene::render() и QGraphicsView::render(). Функции предоставляют одинаковый API: вы можете настроить сцену или представление для отрисовки всего или части содержимого в любой устройство рисования, передав QPainter в любую из функций отрисовки. Этот пример показывает, как напечатать всю сцену на целую страницу с помощью QPrinter.
QGraphicsScene scene;
QPrinter printer;
scene.addRect(QRectF(0, 0, 100, 200), QPen(Qt::black), QBrush(Qt::green));
if (QPrintDialog(&printer).exec() == QDialog::Accepted) {
QPainter painter(&printer);
painter.setRenderHint(QPainter::Antialiasing);
scene.render(&painter);
} Разница между функциями отрисовки сцены и представления заключается в том, что одна работает в координатах сцены, а другая — в координатах представления. QGraphicsScene::render() часто предпочтительнее для печати целых фрагментов сцены без преобразований, таких как для построения геометрических данных или для печати текстового документа. QGraphicsView::render(), с другой стороны, подходит для создания снимков экрана; его стандартное поведение — отрисовка точного содержимого области просмотра с использованием предоставленного рисовальщика.
QGraphicsScene scene;
scene.addRect(QRectF(0, 0, 100, 200), QPen(Qt::black), QBrush(Qt::green));
QPixmap pixmap;
QPainter painter(&pixmap);
painter.setRenderHint(QPainter::Antialiasing);
scene.render(&painter);
painter.end();
pixmap.save("scene.png"); Когда размеры исходной и целевой областей не совпадают, содержимое источника растягивается для соответствия целевой области. Передавая Qt::AspectRatioMode в используемую функцию отрисовки, вы можете выбрать сохранение или игнорирование соотношения сторон сцены при растягивании содержимого.
Перетаскивание
Поскольку QGraphicsView наследуется от QWidget косвенно, он уже предоставляет ту же функциональность перетаскивания, что и QWidget. Кроме того, для удобства, фреймворк Graphics View предоставляет поддержку перетаскивания для сцены и для каждого элемента. Когда представление получает перетаскивание, оно преобразует события перетаскивания в QGraphicsSceneDragDropEvent, который затем передается в сцену. Сцена берет на себя планирование этого события и отправляет его первому элементу под курсором мыши, который принимает перетаскивание.
Чтобы начать перетаскивание из элемента, создайте объект QDrag, передав указатель на виджет, который запускает перетаскивание. Элементы могут наблюдаться несколькими представлениями одновременно, но только одно представление может начать перетаскивание. Перетаскивания в большинстве случаев запускаются в результате нажатия или перемещения мыши, поэтому в mousePressEvent() или mouseMoveEvent() можно получить указатель на исходный виджет из события. Например:
void CustomItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
QMimeData *data = new QMimeData;
QDrag *drag = new QDrag(event->widget());
drag->setMimeData(data);
drag->exec();
} Чтобы перехватить события перетаскивания для сцены, переопределите QGraphicsScene::dragEnterEvent() и те обработчики событий, которые необходимы вашей конкретной сцене, в подклассе QGraphicsItem. Вы можете узнать больше о перетаскивании в графическом представлении в документации для каждого из обработчиков событий QGraphicsScene.
Элементы могут включить поддержку перетаскивания, вызвав QGraphicsItem::setAcceptDrops(). Чтобы обработать входящее перетаскивание, переопределите QGraphicsItem::dragEnterEvent(), QGraphicsItem::dragMoveEvent(), QGraphicsItem::dragLeaveEvent() и QGraphicsItem::dropEvent().
См. также пример Робот перетаскивания для демонстрации поддержки перетаскивания в графическом представлении.
Курсоры и всплывающие подсказки
Как и QWidget, QGraphicsItem также поддерживает курсоры (QGraphicsItem::setCursor()), и всплывающие подсказки (QGraphicsItem::setToolTip()). Курсоры и всплывающие подсказки активируются QGraphicsView, когда курсор мыши попадает в область элемента (обнаружено вызовом QGraphicsItem::contains()).
Вы также можете установить стандартный курсор непосредственно в представлении, вызвав QGraphicsView::setCursor().
См. также пример Робот перетаскивания для кода, реализующего обработку всплывающих подсказок и формы курсора.
Анимация
Графическое представление поддерживает анимацию на нескольких уровнях. Вы можете легко собрать анимацию, используя фреймворк анимации. Для этого вам нужно, чтобы ваши элементы наследовались от QGraphicsObject и связали QPropertyAnimation с ними. QPropertyAnimation позволяет анимировать любой свойство QObject.
Другой вариант — создать пользовательский элемент, который наследует от QObject и QGraphicsItem. Элемент может настроить собственные таймеры и управлять анимацией с помощью пошаговых действий в QObject::timerEvent().
Третий вариант, который в основном доступен для совместимости с QCanvas в Qt 3, — это ускорение сцены, вызывая QGraphicsScene::advance(), который в свою очередь вызывает QGraphicsItem::advance().
Отрисовка с помощью OpenGL
Чтобы включить отрисовку с помощью OpenGL, просто установите новый QOpenGLWidget как область просмотра QGraphicsView, вызвав QGraphicsView::setViewport(). Если вы хотите OpenGL с сглаживанием, вам нужно установить QSurfaceFormat с необходимым количеством выборок (см. QSurfaceFormat::setSamples()).
Пример:
QGraphicsView view(&scene); QOpenGLWidget *gl = new QOpenGLWidget(); QSurfaceFormat format; format.setSamples(4); gl->setFormat(format); view.setViewport(gl);
Группы элементов
Сделав элемент дочерним по отношению к другому, вы можете получить самую важную функцию группирования элементов: элементы будут перемещаться вместе, и все преобразования будут передаваться от родителя к дочернему элементу.
Кроме того, QGraphicsItemGroup — это специальный элемент, который объединяет обработку событий дочерних элементов с удобным интерфейсом для добавления и удаления элементов в группу и из нее. Добавление элемента в QGraphicsItemGroup сохранит исходное положение и преобразование элемента, в то время как переопределение родительских элементов в целом приведет к перепозиционированию дочернего элемента относительно нового родителя. Для удобства вы можете создать QGraphicsItemGroup через сцену, вызвав QGraphicsScene::createItemGroup().
Виджеты и макеты
Qt 4.4 добавила поддержку элементов, учитывающих геометрию и компоновку, через QGraphicsWidget. Этот специальный базовый элемент похож на QWidget, но в отличие от QWidget, он не наследуется от QPaintDevice, а от QGraphicsItem. Это позволяет вам создавать полные виджеты с событиями, сигналами и слотами, подсказками размера и политиками, и вы также можете управлять геометрией ваших виджетов в макетах через QGraphicsLinearLayout и QGraphicsGridLayout.
QGraphicsWidget
Основываясь на возможностях и компактности QGraphicsItem, QGraphicsWidget объединяет лучшее из обоих миров: дополнительные функции из QWidget, такие как стиль, шрифт, палитра, направление макета и его геометрия, и независимость от разрешения и поддержка преобразований из QGraphicsItem. Поскольку Вид графики использует реальные координаты вместо целых чисел, функции геометрии QGraphicsWidget также работают с QRectF и QPointF. Это также относится к прямоугольникам рамки, отступам и интервалам. Например, с QGraphicsWidget часто задают отступы содержимого (0,5, 0,5, 0,5, 0,5). Вы можете создавать как дочерние виджеты, так и "главные" окна; в некоторых случаях вы теперь можете использовать Вид графики для расширенных приложений MDI.
Поддерживаются некоторые свойства QWidget, включая флаги и атрибуты окна, но не все. Вы должны обратиться к документации класса QGraphicsWidget для получения полного обзора того, что поддерживается, а что нет. Например, вы можете создать декорированные окна, передав флаг окна Qt::Window конструктору QGraphicsWidget, но Вид графики в настоящее время не поддерживает флаги Qt::Sheet и Qt::Drawer, которые распространены в macOS.
QGraphicsLayout
QGraphicsLayout — это часть фреймворка макетов второго поколения, разработанного специально для QGraphicsWidget. Его API очень похож на QLayout. Вы можете управлять виджетами и подмакетами внутри QGraphicsLinearLayout и QGraphicsGridLayout. Вы также можете легко написать свой собственный макет, унаследовав его от QGraphicsLayout, или добавить свои собственные элементы QGraphicsItem в макет, написав адаптер, унаследовав его от QGraphicsLayoutItem.
Поддержка встраиваемых виджетов
Вид графики обеспечивает бесшовную поддержку встраивания любого виджета в сцену. Вы можете встроить простые виджеты, такие как QLineEdit или QPushButton, сложные виджеты, такие как QTabWidget, и даже полные главные окна. Чтобы встроить свой виджет в сцену, просто вызовите QGraphicsScene::addWidget() или создайте экземпляр QGraphicsProxyWidget, чтобы встроить свой виджет вручную.
С помощью QGraphicsProxyWidget Вид графики может глубоко интегрировать функции клиентского виджета, включая курсоры, всплывающие подсказки, события мыши, планшета и клавиатуры, дочерние виджеты, анимации, всплывающие окна (например, QComboBox или QCompleter), и фокус и активацию ввода виджета. QGraphicsProxyWidget даже интегрирует порядок ввода встраиваемого виджета, так что вы можете переключаться между встраиваемыми виджетами. Вы можете даже встроить новый QGraphicsView в свою сцену, чтобы обеспечить сложные вложенные сцены.
При преобразовании встраиваемого виджета Вид графики гарантирует, что виджет преобразуется независимо от разрешения, позволяя шрифтам и стилю оставаться четкими при увеличении масштаба. (Обратите внимание, что эффект независимости от разрешения зависит от стиля.)
Производительность
Инструкции с плавающей точкой
Для точного и быстрого применения преобразований и эффектов к элементам, Вид графики построен с предположением, что аппаратное обеспечение пользователя обеспечивает приемлемую производительность для инструкций с плавающей точкой.
Многие рабочие станции и настольные компьютеры оснащены соответствующим аппаратным обеспечением для ускорения подобных вычислений, но некоторые встраиваемые устройства могут предоставлять только библиотеки для обработки математических операций или эмулировать инструкции с плавающей точкой в программном обеспечении.
В результате определенные типы эффектов могут быть медленнее, чем ожидалось, на определенных устройствах. Возможно, удастся компенсировать эту потерю производительности, внеся оптимизации в других областях; например, используя OpenGL для рендеринга сцены. Однако любые такие оптимизации могут сами по себе снизить производительность, если они также зависят от наличия аппаратного обеспечения с плавающей точкой.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.1/graphicsview.html