QGraphicsScene и QGraphicsWidget (многоразовые и встраиваемые) - PullRequest
0 голосов
/ 04 апреля 2011

Я должен начать с того, что пытался посмотреть на эту проблему со всех POV. Я также спросил о freenode, и мне предложили кое-что, но в конце концов оказалось, что эти предложения могут не сработать.

Мне показалось, что те, кто вносит предложения, на самом деле не знают, как выглядит иерархия классов и концепций.

Как говорится, я годами не использовал Qt, поэтому, пожалуйста, потерпите меня.

То, что я хочу сделать, это графический элемент (QGraphicsWidget, ... Item, независимо от того, какой класс я не знаю, от чего он должен наследовать), который может находиться на декорациях QGraphicsScene.

Представьте, что вы хотите создать повторно используемый компонент для игр на основе сетки, например Линкор .

Новые объекты (например, линкор) в этом виджете могут быть представлены в виде битовых матриц и созданы / вставлены на лету.

Сами строительные блоки (заполненные QGraphicsRectItem или «пустые») внутри него должны управляться классом макета. По умолчанию может служить QGraphicsGridLayout, но он должен позволять подключать пользовательский макет. Это позволило бы новые 2D макеты, такие как изометрические.

Наличие макета внутри виджета также упростит разработку игры поверх этого виджета, так как у вас будут методы itemAt () и слои для организации объектов в «сетке».

И помните, сам виджет может находиться внутри пейзажа.

Итак, какие понятия (виджет сетки, блок сетки, макет сетки) должны наследоваться от каких классов qt4 (4.7.2)?

Примечание: уже выходящие из классов / фреймворков / что бы то ни было тоже в порядке, но имейте в виду, что я не хочу распределять библиотеки толще 3-4 Мб для пользователей Windows.

1 Ответ

2 голосов
/ 06 апреля 2011

Исходя из вашего описания, я бы рекомендовал реализовать три основных понятия:

1) Виджет "grid" наследуется от QGraphicsWidget, поскольку он поддерживает добавление макетов.Если вы согласитесь с QGraphicsItem, вам нужно будет заново реализовать механизм разметки, который очень болезненный.Сетка создает блок «сетка» в зависимости от формы «сетки», предоставленной макетом «сетка».

2) Макет «сетки» наследуется от QGraphicsLayout.Вы должны иметь возможность почти напрямую использовать QGraphicsGridLayout для создания простых игр с квадратной сеткой.Вам придется создавать новые подклассы для обработки других видов сеточных фигур.Одна особенность, которую вы должны иметь в этом классе, - это определение формы блока сетки (квадрат, шестиугольник, ромб).Это определение, заданное как QPolygon, может использоваться для создания блока сетки правильной формы.

3) блок "grid" наследуется от QGraphicsPolygonItem и QGraphicsLayoutItem.Это более общий подход к определению элемента сетки как многоугольника.Вы можете иметь прямоугольную форму, ромб, шестиугольную форму и т. Д. Если вы хотите, чтобы объект сетки был диском, упорядоченным по квадратной сетке (см., Например, игру Sane), вы можете создать специальный элемент блока «сетка»,содержит (в детстве) QGraphicsEllipseItem.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...