Я пытаюсь создать приложение "paintbru sh", используя пользовательский набор инструментов, созданный в QML, и QGraphicScene, управляемый в c ++. Практически я могу выбрать инструмент, нажав кнопку на панели инструментов QML и использовать его для рисования чего-либо на QGraphicScene.
Я пробовал так:
//MainWindow.h
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow() {
scene = new Scene(this);
scene->setSceneRect(0, 0, 1920, 1200);
QQuickWidget *quickwidget = new QQuickWidget();
quickwidget->setSource(QUrl(QStringLiteral("qrc:/main.qml")));
scene->addWidget(quickwidget);
view = new QGraphicsView(scene);
setCentralWidget(view);
}
private:
QGraphicsView* view;
Scene* scene;
};
//Scene.h
class Scene : public QGraphicsScene
{
Q_OBJECT
Q_PROPERTY(Enums::Mode sceneMode READ sceneMode NOTIFY sceneModeChanged)
public:
Scene(QObject* parent = 0);
Enums::Mode sceneMode() const { return m_sceneMode; }
Q_INVOKABLE void setMode(Enums::Mode mode);
signals:
void sceneModeChanged();
protected:
void mousePressEvent(QGraphicsSceneMouseEvent *event);
void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
void keyPressEvent(QKeyEvent *event);
private:
Enums::Mode m_sceneMode;
QPointF origPoint;
QGraphicsItem* itemToDraw;
QPointF startPoint;
void makeItemsControllable(bool areControllable);
};
//Main.qml
Item {
width: 1920
height: 1200
ColumnTopLeftButtons { id: topLeftButtonsColumn }
ColumnTopRightButtons { id: topRightButtons }
ColumnBottomLeftButtons { id:bottomLeftButtons }
BarTopPanels { id:topPanelsBar }
RightPanel { id: toolbox }
}
Делая так, я рисую QML на сцене, получая, что любое действие, которое я делаю на кнопках панелей или набор инструментов взят со сцены в качестве входных данных. Но если я сделаю для разных объектов, один для сцены и один для qml, также установив координаты друг для друга, чтобы видеть один над другим (я предпочитаю сцену под инструментами), они будут располагаться рядом. Итак, как я могу «изолировать» входные данные на панели инструментов относительно сцены (которая не всегда будет использоваться) или как я могу иметь два разных слоя как для инструментов qml, так и для сцены?