#qt #qt5 #qgraphicsview #qquickitem
Вопрос:
У меня была игра, написанная QGrapicsView/QGraphicsScene. Теперь я хочу встроить его в приложение QtQuick, написанное QQuickWindow/QQuickItem. Как я могу это сделать?
Оригинальный Код Игры:
TileScene *scene = new TileScene(":/tileset.png", ":/test.tmx"); NPC *joe = new NPC(":/nerd.png"); scene-gt;addCharacter(joe); joe-gt;setPos(15 * TILE_WIDTH, 23 * TILE_HEIGHT); // Set up a view of our scene view = new CharacterView(scene); view.show();
Приложение QtQuick:
MainContent::MainContent( QQuickItem* parent ) { auto gridBox = new MainContentGridBox(); gridBox-gt;addItem( new GameItem("Deck 01"), 0, 0); ... } //GameItem.h class GameItem : public QQuickItem { Q_OBJECT public: GameItem(QString text, QQuickItem* parent = nullptr); } //GameItem.cpp GameItem::GameItem(QString text, QQuickItem* parent) { TileScene *scene = new TileScene(":/tileset.png", ":/test.tmx"); NPC *joe = new NPC(":/nerd.png"); scene-gt;addCharacter(joe); joe-gt;setPos(15 * TILE_WIDTH, 23 * TILE_HEIGHT); // Set up a view of our scene view = new CharacterView(scene); }
Комментарии:
1. это ненормально-отправлять виджет в элемент qml, но для ранней работы вы можете запустить QWidget::Grab для доступа к отображаемому изображению QGraphicsView и показать в QtQuick, но в этом решении взаимодействие с мышью будет игнорироваться.