Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. German
  4. Hilfe bei Lesezugriffsverletzung
Forum Updated to NodeBB v4.3 + New Features

Hilfe bei Lesezugriffsverletzung

Scheduled Pinned Locked Moved Unsolved German
5 Posts 3 Posters 734 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • K Offline
    K Offline
    Kirito Usaki
    wrote on last edited by
    #1

    Hallo,
    Ich habe ein MainWindow mit Qt-Advanced-Docking-System https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/blob/master/doc/user-guide.md#adding-auto-hide-widgets.
    In dem Dock Fenster will ich das calculator beispiel des nodeeditor einbauen https://github.com/paceholder/nodeeditor.
    Das beispiel funktioniert wenn ich es direkt in die main schreibe aber nicht wenn ich es in ein CDockWidget, da bekomme ich, wenn ich rechte maustaste drücke ein lesezugriffsverletzung in der memory: Ausgelöste Ausnahme: Lesezugriffsverletzung
    "this" war "0xFFFFFFFFFFFFFFF7".

    ```
    

    void _Incref() noexcept { // increment use count
    _MT_INCR(_Uses);
    }

    void _Incwref
    
    Die QtMainWindowClass.h:
    

    #pragma once

    #include <QMainWindow>
    #include <QComboBox>
    #include <QWidgetAction>
    #include "DockManager.h"
    #include "DockAreaWidget.h"
    #include "DockWidget.h"

    #include <QWidget>
    #include <QGraphicsView>
    #include <QGraphicsScene>
    #include <QVBoxLayout>
    #include <QtCore>
    #include <QObject>
    #include <QtCore/qglobal.h>

    #include <memory>

    #include <QtNodes/ConnectionStyle>
    #include <QtNodes/DataFlowGraphModel>
    #include <QtNodes/DataFlowGraphicsScene>
    #include <QtNodes/GraphicsView>
    #include <QtNodes/NodeData>
    #include <QtNodes/NodeDelegateModelRegistry>

    #include <QtGui/QScreen>
    #include <QtWidgets/QApplication>
    #include <QtWidgets/QMenuBar>
    #include <QtWidgets/QVBoxLayout>

    #include <QtGui/QScreen>

    #include "AdditionModel.h"
    #include "DivisionModel.h"
    #include "MultiplicationModel.h"
    #include "NumberDisplayDataModel.h"
    #include "NumberSourceDataModel.h"
    #include "SubtractionModel.h"

    using QtNodes::ConnectionStyle;
    using QtNodes::DataFlowGraphicsScene;
    using QtNodes::DataFlowGraphModel;
    using QtNodes::GraphicsView;
    using QtNodes::NodeDelegateModelRegistry;

    QT_BEGIN_NAMESPACE
    namespace Ui { class QtMainWindowClass; };

    QT_END_NAMESPACE

    class QtMainWindowClass : public QMainWindow
    {
    Q_OBJECT

    public:
    QtMainWindowClass(QWidget* parent = nullptr);
    ~QtMainWindowClass();

    static std::shared_ptr<NodeDelegateModelRegistry> registerDataModels();
    static void setStyle();
    

    private:
    Ui::QtMainWindowClass* ui;

    ads::CDockManager* DockManager;
    

    };

    #include "QtMainWindowClass.h"
    #include "ui_QtMainWindowClass.h"

    #include "AutoHideDockContainer.h"
    #include "DockAreaWidget.h"
    #include "DockAreaTitleBar.h"

    #include <QTableWidget>

    #include <QtNodes/ConnectionStyle>
    #include <QtNodes/DataFlowGraphModel>
    #include <QtNodes/DataFlowGraphicsScene>
    #include <QtNodes/GraphicsView>
    #include <QtNodes/NodeData>
    #include <QtNodes/NodeDelegateModelRegistry>

    #include <QtGui/QScreen>
    #include <QtWidgets/QApplication>
    #include <QtWidgets/QMenuBar>
    #include <QtWidgets/QVBoxLayout>

    #include <QtGui/QScreen>

    #include "AdditionModel.h"
    #include "DivisionModel.h"
    #include "MultiplicationModel.h"
    #include "NumberDisplayDataModel.h"
    #include "NumberSourceDataModel.h"
    #include "SubtractionModel.h"

    #include <QApplication>

    using namespace ads;

    using QtNodes::ConnectionStyle;
    using QtNodes::DataFlowGraphicsScene;
    using QtNodes::DataFlowGraphModel;
    using QtNodes::GraphicsView;
    using QtNodes::NodeDelegateModelRegistry;

    std::shared_ptr<NodeDelegateModelRegistry> QtMainWindowClass::registerDataModels()
    {
    auto ret = std::make_shared<NodeDelegateModelRegistry>();
    ret->registerModel<NumberSourceDataModel>("Sources");

    ret->registerModel<NumberDisplayDataModel>("Displays");
    
    ret->registerModel<AdditionModel>("Operators");
    
    ret->registerModel<SubtractionModel>("Operators");
    
    ret->registerModel<MultiplicationModel>("Operators");
    
    ret->registerModel<DivisionModel>("Operators");
    
    return ret;
    

    }

    void QtMainWindowClass::setStyle()
    {
    ConnectionStyle::setConnectionStyle(
    R"(
    {
    "ConnectionStyle": {
    "ConstructionColor": "gray",
    "NormalColor": "black",
    "SelectedColor": "gray",
    "SelectedHaloColor": "deepskyblue",
    "HoveredColor": "deepskyblue",

      "LineWidth": 3.0,
      "ConstructionLineWidth": 2.0,
      "PointDiameter": 10.0,
    
      "UseDataDefinedColors": true
    }
    

    }
    )");
    }

    QtMainWindowClass::QtMainWindowClass(QWidget* parent)
    : QMainWindow(parent)
    , ui(new Ui::QtMainWindowClass)

    {
    ui->setupUi(this);

    CDockManager::setConfigFlag(CDockManager::OpaqueSplitterResize, true);
    CDockManager::setConfigFlag(CDockManager::XmlCompressionEnabled, false);
    CDockManager::setConfigFlag(CDockManager::FocusHighlighting, true);
    CDockManager::setAutoHideConfigFlags(CDockManager::DefaultAutoHideConfig);
    
    CDockManager::setConfigFlag(CDockManager::DragPreviewIsDynamic, true);
    CDockManager::setConfigFlag(CDockManager::DragPreviewShowsContentPixmap, true);
    CDockManager::setConfigFlag(CDockManager::DragPreviewHasWindowFrame, true);
    CDockManager::setAutoHideConfigFlag(CDockManager::AutoHideCloseButtonCollapsesDock, true);
    
    
    DockManager = new CDockManager(this);
    
    QTableWidget* Module = new QTableWidget();
    Module->setColumnCount(3);
    Module->setRowCount(10);
    
    CDockWidget* TableDockWidget = new CDockWidget("Module");
    TableDockWidget->setWidget(Module);
    
    TableDockWidget->setMinimumWidth(300);
    auto TableArea = DockManager->addDockWidget(DockWidgetArea::LeftDockWidgetArea, TableDockWidget);
    TableArea->setMinimumWidth(300);
    
    ui->menuView->addAction(TableDockWidget->toggleViewAction());
    
    QTableWidget* Module2 = new QTableWidget();
    Module2->setColumnCount(3);
    Module2->setRowCount(10);  
    

    //// Erstellen eines neuen GraphicsView
    // QGraphicsView* graphicsView = new QGraphicsView();

    // // Festlegen der Eigenschaften des GraphicsView
    // graphicsView->setScene(new QGraphicsScene());
    // graphicsView->setRenderHints(QPainter::Antialiasing);
    // // hinzufügen eines GraphicsRectItem in die GraphicsView
    // graphicsView->scene()->addItem(new QGraphicsRectItem(0, 0, 100, 100));

    // erstellen einer instanz von GraphicFlowClass
    

    // GraphicFlowClass* Module2 = new GraphicFlowClass();

    // erstellen des hauptfensters
    

    // Erstellen der Szene mit dem richtigen AbstractGraphModel

    /* GraphicsSceneClass* scene = new GraphicsSceneClass(graphModel, parent);*/

    // Erstellen des Hauptfensters
    CDockWidget* MainWindow1 = new CDockWidget("MainWindow");

    // std::shared_ptr<NodeDelegateModelRegistry> registry = registerDataModels();

    std::shared_ptr<NodeDelegateModelRegistry> registry = QtMainWindowClass::registerDataModels();
    QtMainWindowClass::setStyle();
    // erstellen eines Widgets
    QWidget* widget = new QWidget(MainWindow1);
    
    
    
    
    
    auto menuBar = new QMenuBar();
    QMenu* menu = menuBar->addMenu("File");
    auto saveAction = menu->addAction("Save Scene");
    auto loadAction = menu->addAction("Load Scene");
    
    QVBoxLayout* l = new QVBoxLayout(widget);
    
    DataFlowGraphModel dataFlowGraphModel(registry);
    
    l->addWidget(menuBar);
    auto scene = new DataFlowGraphicsScene(dataFlowGraphModel, widget);
    
    auto view = new GraphicsView(scene);
    l->addWidget(view);
    l->setContentsMargins(0, 0, 0, 0);
    l->setSpacing(0);
    
    QObject::connect(saveAction, &QAction::triggered, scene, &DataFlowGraphicsScene::save);
    
    QObject::connect(loadAction, &QAction::triggered, scene, &DataFlowGraphicsScene::load);
    
    QObject::connect(scene, &DataFlowGraphicsScene::sceneLoaded, view, &GraphicsView::centerScene);
    
    
    // Setzen der Ansicht als Widget des DockWidgets
    MainWindow1->setWidget(widget);
    
    
    // Setzen der minimun size auf die restliche Größe des Hauptfensters
    MainWindow1->setMinimumSizeHintMode(CDockWidget::MinimumSizeHintFromDockWidget);
    
    MainWindow1->setMinimumWidth(700);
    auto MainWindowArea = DockManager->addDockWidget(DockWidgetArea::RightDockWidgetArea, MainWindow1);
    MainWindowArea->setMinimumWidth(700);
    
    MainWindow1->showNormal();
    
    // Weitere Aktionen
    ui->menuView->addAction(MainWindow1->toggleViewAction());
    

    }

    QtMainWindowClass::~QtMainWindowClass()
    {
    delete ui;

    }

    Im CDockWidget* MainWindow1... versuche ich es einzubinden.  Ich glaube das ich etwas falsch in der einbindung der klasse mache. der original main code ist: 
    

    #include <QtNodes/ConnectionStyle>
    #include <QtNodes/DataFlowGraphModel>
    #include <QtNodes/DataFlowGraphicsScene>
    #include <QtNodes/GraphicsView>
    #include <QtNodes/NodeData>
    #include <QtNodes/NodeDelegateModelRegistry>

    #include <QtGui/QScreen>
    #include <QtWidgets/QApplication>
    #include <QtWidgets/QMenuBar>
    #include <QtWidgets/QVBoxLayout>

    #include <QtGui/QScreen>

    #include "AdditionModel.hpp"
    #include "DivisionModel.hpp"
    #include "MultiplicationModel.hpp"
    #include "NumberDisplayDataModel.hpp"
    #include "NumberSourceDataModel.hpp"
    #include "SubtractionModel.hpp"

    using QtNodes::ConnectionStyle;
    using QtNodes::DataFlowGraphicsScene;
    using QtNodes::DataFlowGraphModel;
    using QtNodes::GraphicsView;
    using QtNodes::NodeDelegateModelRegistry;

    static std::shared_ptr<NodeDelegateModelRegistry> registerDataModels()
    {
    auto ret = std::make_shared<NodeDelegateModelRegistry>();
    ret->registerModel<NumberSourceDataModel>("Sources");

    ret->registerModel<NumberDisplayDataModel>("Displays");
    
    ret->registerModel<AdditionModel>("Operators");
    
    ret->registerModel<SubtractionModel>("Operators");
    
    ret->registerModel<MultiplicationModel>("Operators");
    
    ret->registerModel<DivisionModel>("Operators");
    
    return ret;
    

    }

    static void setStyle()
    {
    ConnectionStyle::setConnectionStyle(
    R"(
    {
    "ConnectionStyle": {
    "ConstructionColor": "gray",
    "NormalColor": "black",
    "SelectedColor": "gray",
    "SelectedHaloColor": "deepskyblue",
    "HoveredColor": "deepskyblue",

      "LineWidth": 3.0,
      "ConstructionLineWidth": 2.0,
      "PointDiameter": 10.0,
    
      "UseDataDefinedColors": true
    }
    

    }
    )");
    }

    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);

    setStyle();
    
    std::shared_ptr<NodeDelegateModelRegistry> registry = registerDataModels();
    
    QWidget mainWidget;
    
    auto menuBar = new QMenuBar();
    QMenu *menu = menuBar->addMenu("File");
    auto saveAction = menu->addAction("Save Scene");
    auto loadAction = menu->addAction("Load Scene");
    
    QVBoxLayout *l = new QVBoxLayout(&mainWidget);
    
    DataFlowGraphModel dataFlowGraphModel(registry);
    
    l->addWidget(menuBar);
    auto scene = new DataFlowGraphicsScene(dataFlowGraphModel, &mainWidget);
    
    auto view = new GraphicsView(scene);
    l->addWidget(view);
    l->setContentsMargins(0, 0, 0, 0);
    l->setSpacing(0);
    
    QObject::connect(saveAction, &QAction::triggered, scene, &DataFlowGraphicsScene::save);
    
    QObject::connect(loadAction, &QAction::triggered, scene, &DataFlowGraphicsScene::load);
    
    QObject::connect(scene, &DataFlowGraphicsScene::sceneLoaded, view, &GraphicsView::centerScene);
    
    mainWidget.setWindowTitle("Data Flow: simplest calculator");
    mainWidget.resize(800, 600);
    // Center window.
    mainWidget.move(QApplication::primaryScreen()->availableGeometry().center()
                    - mainWidget.rect().center());
    mainWidget.showNormal();
    
    return app.exec();
    

    }

    
    Ich hoffe das mir Jemand helfen kann dieses Problem zu lösen. Danke
    
    Im rechten Fenster soll man mit der Rechten Maustaste drücken können dann erscheint eine auswahl der nodes. ![Programm1.png](https://ddgobkiprc33d.cloudfront.net/24e5c53c-e46d-4244-9fa6-b6d50e7fa8f2.png)
    Pl45m4P 1 Reply Last reply
    0
    • K Kirito Usaki

      Hallo,
      Ich habe ein MainWindow mit Qt-Advanced-Docking-System https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/blob/master/doc/user-guide.md#adding-auto-hide-widgets.
      In dem Dock Fenster will ich das calculator beispiel des nodeeditor einbauen https://github.com/paceholder/nodeeditor.
      Das beispiel funktioniert wenn ich es direkt in die main schreibe aber nicht wenn ich es in ein CDockWidget, da bekomme ich, wenn ich rechte maustaste drücke ein lesezugriffsverletzung in der memory: Ausgelöste Ausnahme: Lesezugriffsverletzung
      "this" war "0xFFFFFFFFFFFFFFF7".

      ```
      

      void _Incref() noexcept { // increment use count
      _MT_INCR(_Uses);
      }

      void _Incwref
      
      Die QtMainWindowClass.h:
      

      #pragma once

      #include <QMainWindow>
      #include <QComboBox>
      #include <QWidgetAction>
      #include "DockManager.h"
      #include "DockAreaWidget.h"
      #include "DockWidget.h"

      #include <QWidget>
      #include <QGraphicsView>
      #include <QGraphicsScene>
      #include <QVBoxLayout>
      #include <QtCore>
      #include <QObject>
      #include <QtCore/qglobal.h>

      #include <memory>

      #include <QtNodes/ConnectionStyle>
      #include <QtNodes/DataFlowGraphModel>
      #include <QtNodes/DataFlowGraphicsScene>
      #include <QtNodes/GraphicsView>
      #include <QtNodes/NodeData>
      #include <QtNodes/NodeDelegateModelRegistry>

      #include <QtGui/QScreen>
      #include <QtWidgets/QApplication>
      #include <QtWidgets/QMenuBar>
      #include <QtWidgets/QVBoxLayout>

      #include <QtGui/QScreen>

      #include "AdditionModel.h"
      #include "DivisionModel.h"
      #include "MultiplicationModel.h"
      #include "NumberDisplayDataModel.h"
      #include "NumberSourceDataModel.h"
      #include "SubtractionModel.h"

      using QtNodes::ConnectionStyle;
      using QtNodes::DataFlowGraphicsScene;
      using QtNodes::DataFlowGraphModel;
      using QtNodes::GraphicsView;
      using QtNodes::NodeDelegateModelRegistry;

      QT_BEGIN_NAMESPACE
      namespace Ui { class QtMainWindowClass; };

      QT_END_NAMESPACE

      class QtMainWindowClass : public QMainWindow
      {
      Q_OBJECT

      public:
      QtMainWindowClass(QWidget* parent = nullptr);
      ~QtMainWindowClass();

      static std::shared_ptr<NodeDelegateModelRegistry> registerDataModels();
      static void setStyle();
      

      private:
      Ui::QtMainWindowClass* ui;

      ads::CDockManager* DockManager;
      

      };

      #include "QtMainWindowClass.h"
      #include "ui_QtMainWindowClass.h"

      #include "AutoHideDockContainer.h"
      #include "DockAreaWidget.h"
      #include "DockAreaTitleBar.h"

      #include <QTableWidget>

      #include <QtNodes/ConnectionStyle>
      #include <QtNodes/DataFlowGraphModel>
      #include <QtNodes/DataFlowGraphicsScene>
      #include <QtNodes/GraphicsView>
      #include <QtNodes/NodeData>
      #include <QtNodes/NodeDelegateModelRegistry>

      #include <QtGui/QScreen>
      #include <QtWidgets/QApplication>
      #include <QtWidgets/QMenuBar>
      #include <QtWidgets/QVBoxLayout>

      #include <QtGui/QScreen>

      #include "AdditionModel.h"
      #include "DivisionModel.h"
      #include "MultiplicationModel.h"
      #include "NumberDisplayDataModel.h"
      #include "NumberSourceDataModel.h"
      #include "SubtractionModel.h"

      #include <QApplication>

      using namespace ads;

      using QtNodes::ConnectionStyle;
      using QtNodes::DataFlowGraphicsScene;
      using QtNodes::DataFlowGraphModel;
      using QtNodes::GraphicsView;
      using QtNodes::NodeDelegateModelRegistry;

      std::shared_ptr<NodeDelegateModelRegistry> QtMainWindowClass::registerDataModels()
      {
      auto ret = std::make_shared<NodeDelegateModelRegistry>();
      ret->registerModel<NumberSourceDataModel>("Sources");

      ret->registerModel<NumberDisplayDataModel>("Displays");
      
      ret->registerModel<AdditionModel>("Operators");
      
      ret->registerModel<SubtractionModel>("Operators");
      
      ret->registerModel<MultiplicationModel>("Operators");
      
      ret->registerModel<DivisionModel>("Operators");
      
      return ret;
      

      }

      void QtMainWindowClass::setStyle()
      {
      ConnectionStyle::setConnectionStyle(
      R"(
      {
      "ConnectionStyle": {
      "ConstructionColor": "gray",
      "NormalColor": "black",
      "SelectedColor": "gray",
      "SelectedHaloColor": "deepskyblue",
      "HoveredColor": "deepskyblue",

        "LineWidth": 3.0,
        "ConstructionLineWidth": 2.0,
        "PointDiameter": 10.0,
      
        "UseDataDefinedColors": true
      }
      

      }
      )");
      }

      QtMainWindowClass::QtMainWindowClass(QWidget* parent)
      : QMainWindow(parent)
      , ui(new Ui::QtMainWindowClass)

      {
      ui->setupUi(this);

      CDockManager::setConfigFlag(CDockManager::OpaqueSplitterResize, true);
      CDockManager::setConfigFlag(CDockManager::XmlCompressionEnabled, false);
      CDockManager::setConfigFlag(CDockManager::FocusHighlighting, true);
      CDockManager::setAutoHideConfigFlags(CDockManager::DefaultAutoHideConfig);
      
      CDockManager::setConfigFlag(CDockManager::DragPreviewIsDynamic, true);
      CDockManager::setConfigFlag(CDockManager::DragPreviewShowsContentPixmap, true);
      CDockManager::setConfigFlag(CDockManager::DragPreviewHasWindowFrame, true);
      CDockManager::setAutoHideConfigFlag(CDockManager::AutoHideCloseButtonCollapsesDock, true);
      
      
      DockManager = new CDockManager(this);
      
      QTableWidget* Module = new QTableWidget();
      Module->setColumnCount(3);
      Module->setRowCount(10);
      
      CDockWidget* TableDockWidget = new CDockWidget("Module");
      TableDockWidget->setWidget(Module);
      
      TableDockWidget->setMinimumWidth(300);
      auto TableArea = DockManager->addDockWidget(DockWidgetArea::LeftDockWidgetArea, TableDockWidget);
      TableArea->setMinimumWidth(300);
      
      ui->menuView->addAction(TableDockWidget->toggleViewAction());
      
      QTableWidget* Module2 = new QTableWidget();
      Module2->setColumnCount(3);
      Module2->setRowCount(10);  
      

      //// Erstellen eines neuen GraphicsView
      // QGraphicsView* graphicsView = new QGraphicsView();

      // // Festlegen der Eigenschaften des GraphicsView
      // graphicsView->setScene(new QGraphicsScene());
      // graphicsView->setRenderHints(QPainter::Antialiasing);
      // // hinzufügen eines GraphicsRectItem in die GraphicsView
      // graphicsView->scene()->addItem(new QGraphicsRectItem(0, 0, 100, 100));

      // erstellen einer instanz von GraphicFlowClass
      

      // GraphicFlowClass* Module2 = new GraphicFlowClass();

      // erstellen des hauptfensters
      

      // Erstellen der Szene mit dem richtigen AbstractGraphModel

      /* GraphicsSceneClass* scene = new GraphicsSceneClass(graphModel, parent);*/

      // Erstellen des Hauptfensters
      CDockWidget* MainWindow1 = new CDockWidget("MainWindow");

      // std::shared_ptr<NodeDelegateModelRegistry> registry = registerDataModels();

      std::shared_ptr<NodeDelegateModelRegistry> registry = QtMainWindowClass::registerDataModels();
      QtMainWindowClass::setStyle();
      // erstellen eines Widgets
      QWidget* widget = new QWidget(MainWindow1);
      
      
      
      
      
      auto menuBar = new QMenuBar();
      QMenu* menu = menuBar->addMenu("File");
      auto saveAction = menu->addAction("Save Scene");
      auto loadAction = menu->addAction("Load Scene");
      
      QVBoxLayout* l = new QVBoxLayout(widget);
      
      DataFlowGraphModel dataFlowGraphModel(registry);
      
      l->addWidget(menuBar);
      auto scene = new DataFlowGraphicsScene(dataFlowGraphModel, widget);
      
      auto view = new GraphicsView(scene);
      l->addWidget(view);
      l->setContentsMargins(0, 0, 0, 0);
      l->setSpacing(0);
      
      QObject::connect(saveAction, &QAction::triggered, scene, &DataFlowGraphicsScene::save);
      
      QObject::connect(loadAction, &QAction::triggered, scene, &DataFlowGraphicsScene::load);
      
      QObject::connect(scene, &DataFlowGraphicsScene::sceneLoaded, view, &GraphicsView::centerScene);
      
      
      // Setzen der Ansicht als Widget des DockWidgets
      MainWindow1->setWidget(widget);
      
      
      // Setzen der minimun size auf die restliche Größe des Hauptfensters
      MainWindow1->setMinimumSizeHintMode(CDockWidget::MinimumSizeHintFromDockWidget);
      
      MainWindow1->setMinimumWidth(700);
      auto MainWindowArea = DockManager->addDockWidget(DockWidgetArea::RightDockWidgetArea, MainWindow1);
      MainWindowArea->setMinimumWidth(700);
      
      MainWindow1->showNormal();
      
      // Weitere Aktionen
      ui->menuView->addAction(MainWindow1->toggleViewAction());
      

      }

      QtMainWindowClass::~QtMainWindowClass()
      {
      delete ui;

      }

      Im CDockWidget* MainWindow1... versuche ich es einzubinden.  Ich glaube das ich etwas falsch in der einbindung der klasse mache. der original main code ist: 
      

      #include <QtNodes/ConnectionStyle>
      #include <QtNodes/DataFlowGraphModel>
      #include <QtNodes/DataFlowGraphicsScene>
      #include <QtNodes/GraphicsView>
      #include <QtNodes/NodeData>
      #include <QtNodes/NodeDelegateModelRegistry>

      #include <QtGui/QScreen>
      #include <QtWidgets/QApplication>
      #include <QtWidgets/QMenuBar>
      #include <QtWidgets/QVBoxLayout>

      #include <QtGui/QScreen>

      #include "AdditionModel.hpp"
      #include "DivisionModel.hpp"
      #include "MultiplicationModel.hpp"
      #include "NumberDisplayDataModel.hpp"
      #include "NumberSourceDataModel.hpp"
      #include "SubtractionModel.hpp"

      using QtNodes::ConnectionStyle;
      using QtNodes::DataFlowGraphicsScene;
      using QtNodes::DataFlowGraphModel;
      using QtNodes::GraphicsView;
      using QtNodes::NodeDelegateModelRegistry;

      static std::shared_ptr<NodeDelegateModelRegistry> registerDataModels()
      {
      auto ret = std::make_shared<NodeDelegateModelRegistry>();
      ret->registerModel<NumberSourceDataModel>("Sources");

      ret->registerModel<NumberDisplayDataModel>("Displays");
      
      ret->registerModel<AdditionModel>("Operators");
      
      ret->registerModel<SubtractionModel>("Operators");
      
      ret->registerModel<MultiplicationModel>("Operators");
      
      ret->registerModel<DivisionModel>("Operators");
      
      return ret;
      

      }

      static void setStyle()
      {
      ConnectionStyle::setConnectionStyle(
      R"(
      {
      "ConnectionStyle": {
      "ConstructionColor": "gray",
      "NormalColor": "black",
      "SelectedColor": "gray",
      "SelectedHaloColor": "deepskyblue",
      "HoveredColor": "deepskyblue",

        "LineWidth": 3.0,
        "ConstructionLineWidth": 2.0,
        "PointDiameter": 10.0,
      
        "UseDataDefinedColors": true
      }
      

      }
      )");
      }

      int main(int argc, char *argv[])
      {
      QApplication app(argc, argv);

      setStyle();
      
      std::shared_ptr<NodeDelegateModelRegistry> registry = registerDataModels();
      
      QWidget mainWidget;
      
      auto menuBar = new QMenuBar();
      QMenu *menu = menuBar->addMenu("File");
      auto saveAction = menu->addAction("Save Scene");
      auto loadAction = menu->addAction("Load Scene");
      
      QVBoxLayout *l = new QVBoxLayout(&mainWidget);
      
      DataFlowGraphModel dataFlowGraphModel(registry);
      
      l->addWidget(menuBar);
      auto scene = new DataFlowGraphicsScene(dataFlowGraphModel, &mainWidget);
      
      auto view = new GraphicsView(scene);
      l->addWidget(view);
      l->setContentsMargins(0, 0, 0, 0);
      l->setSpacing(0);
      
      QObject::connect(saveAction, &QAction::triggered, scene, &DataFlowGraphicsScene::save);
      
      QObject::connect(loadAction, &QAction::triggered, scene, &DataFlowGraphicsScene::load);
      
      QObject::connect(scene, &DataFlowGraphicsScene::sceneLoaded, view, &GraphicsView::centerScene);
      
      mainWidget.setWindowTitle("Data Flow: simplest calculator");
      mainWidget.resize(800, 600);
      // Center window.
      mainWidget.move(QApplication::primaryScreen()->availableGeometry().center()
                      - mainWidget.rect().center());
      mainWidget.showNormal();
      
      return app.exec();
      

      }

      
      Ich hoffe das mir Jemand helfen kann dieses Problem zu lösen. Danke
      
      Im rechten Fenster soll man mit der Rechten Maustaste drücken können dann erscheint eine auswahl der nodes. ![Programm1.png](https://ddgobkiprc33d.cloudfront.net/24e5c53c-e46d-4244-9fa6-b6d50e7fa8f2.png)
      Pl45m4P Offline
      Pl45m4P Offline
      Pl45m4
      wrote on last edited by
      #2

      @Kirito-Usaki

      Formatier bitte deinen Beitrag mal richtig. So, wie aktuell, ist es schwierig durch den Code-"Haufen" durchzublicken.

      Ansonsten wirf alle nicht-essenziellen Sachen raus, adde nur "leere" Module/Widgets und schau ob es crasht und ob dein DockWindow von Github generell funktioniert. Danach fügst du nach und nach wieder alles hinzu bis es crasht oder am Ende alles läuft.
      Wenn der untere Teil des Codes funktioniert, hast du ja was zur Orientierung.


      If debugging is the process of removing software bugs, then programming must be the process of putting them in.

      ~E. W. Dijkstra

      1 Reply Last reply
      0
      • K Offline
        K Offline
        Kirito Usaki
        wrote on last edited by
        #3

        Hallo,
        Ich habe ein MainWindow mit Qt-Advanced-Docking-System https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/blob/master/doc/user-guide.md#adding-auto-hide-widgets.
        In dem Dock Fenster will ich das calculator beispiel des nodeeditor einbauen https://github.com/paceholder/nodeeditor.
        Das beispiel funktioniert wenn ich es direkt in die main schreibe aber nicht wenn ich es in ein CDockWidget, da bekomme ich, wenn ich rechte maustaste drücke ein lesezugriffsverletzung in der memory: Ausgelöste Ausnahme: Lesezugriffsverletzung
        "this" war "0xFFFFFFFFFFFFFFF7".

        void _Incref() noexcept { // increment use count
                _MT_INCR(_Uses);
            }
        
            void _Incwref
        

        Die QtMainWindowClass.h:

        #pragma once
        
        #include <QMainWindow>
        #include <QComboBox>
        #include <QWidgetAction>
        #include "DockManager.h"
        #include "DockAreaWidget.h"
        #include "DockWidget.h"
        
        #include <QWidget>
        #include <QGraphicsView>
        #include <QGraphicsScene>
        #include <QVBoxLayout>
        #include <QtCore>
        #include <QObject>
        #include <QtCore/qglobal.h>
        
        #include <memory>
        
        #include <QtNodes/ConnectionStyle>
        #include <QtNodes/DataFlowGraphModel>
        #include <QtNodes/DataFlowGraphicsScene>
        #include <QtNodes/GraphicsView>
        #include <QtNodes/NodeData>
        #include <QtNodes/NodeDelegateModelRegistry>
        
        #include <QtGui/QScreen>
        #include <QtWidgets/QApplication>
        #include <QtWidgets/QMenuBar>
        #include <QtWidgets/QVBoxLayout>
        
        #include <QtGui/QScreen>
        
        #include "AdditionModel.h"
        #include "DivisionModel.h"
        #include "MultiplicationModel.h"
        #include "NumberDisplayDataModel.h"
        #include "NumberSourceDataModel.h"
        #include "SubtractionModel.h"
        
        using QtNodes::ConnectionStyle;
        using QtNodes::DataFlowGraphicsScene;
        using QtNodes::DataFlowGraphModel;
        using QtNodes::GraphicsView;
        using QtNodes::NodeDelegateModelRegistry;
        
        QT_BEGIN_NAMESPACE
        namespace Ui { class QtMainWindowClass; };
        
        QT_END_NAMESPACE
        
        class QtMainWindowClass : public QMainWindow
        {
            Q_OBJECT
        
        public:
            QtMainWindowClass(QWidget* parent = nullptr);
            ~QtMainWindowClass();
        
            static std::shared_ptr<NodeDelegateModelRegistry> registerDataModels();
            static void setStyle();
        
        
        private:
            Ui::QtMainWindowClass* ui;
        
            ads::CDockManager* DockManager;
        };
        
        #include "QtMainWindowClass.h"
        #include "ui_QtMainWindowClass.h"
        
        #include "AutoHideDockContainer.h"
        #include "DockAreaWidget.h"
        #include "DockAreaTitleBar.h"
        
        #include <QTableWidget>
        
        #include <QtNodes/ConnectionStyle>
        #include <QtNodes/DataFlowGraphModel>
        #include <QtNodes/DataFlowGraphicsScene>
        #include <QtNodes/GraphicsView>
        #include <QtNodes/NodeData>
        #include <QtNodes/NodeDelegateModelRegistry>
        
        #include <QtGui/QScreen>
        #include <QtWidgets/QApplication>
        #include <QtWidgets/QMenuBar>
        #include <QtWidgets/QVBoxLayout>
        
        #include <QtGui/QScreen>
        
        #include "AdditionModel.h"
        #include "DivisionModel.h"
        #include "MultiplicationModel.h"
        #include "NumberDisplayDataModel.h"
        #include "NumberSourceDataModel.h"
        #include "SubtractionModel.h"
        
        #include <QApplication>
        
        using namespace ads;
        
        using QtNodes::ConnectionStyle;
        using QtNodes::DataFlowGraphicsScene;
        using QtNodes::DataFlowGraphModel;
        using QtNodes::GraphicsView;
        using QtNodes::NodeDelegateModelRegistry;
        
        std::shared_ptr<NodeDelegateModelRegistry> QtMainWindowClass::registerDataModels()
        {
            auto ret = std::make_shared<NodeDelegateModelRegistry>();
            ret->registerModel<NumberSourceDataModel>("Sources");
        
            ret->registerModel<NumberDisplayDataModel>("Displays");
        
            ret->registerModel<AdditionModel>("Operators");
        
            ret->registerModel<SubtractionModel>("Operators");
        
            ret->registerModel<MultiplicationModel>("Operators");
        
            ret->registerModel<DivisionModel>("Operators");
        
            return ret;
        }
        
        
        
        void QtMainWindowClass::setStyle()
        {
            ConnectionStyle::setConnectionStyle(
                R"(
          {
            "ConnectionStyle": {
              "ConstructionColor": "gray",
              "NormalColor": "black",
              "SelectedColor": "gray",
              "SelectedHaloColor": "deepskyblue",
              "HoveredColor": "deepskyblue",
        
              "LineWidth": 3.0,
              "ConstructionLineWidth": 2.0,
              "PointDiameter": 10.0,
        
              "UseDataDefinedColors": true
            }
          }
          )");
        }
        
        QtMainWindowClass::QtMainWindowClass(QWidget* parent)
            : QMainWindow(parent)
            , ui(new Ui::QtMainWindowClass)
            
        {
            ui->setupUi(this);
        
            CDockManager::setConfigFlag(CDockManager::OpaqueSplitterResize, true);
            CDockManager::setConfigFlag(CDockManager::XmlCompressionEnabled, false);
            CDockManager::setConfigFlag(CDockManager::FocusHighlighting, true);
            CDockManager::setAutoHideConfigFlags(CDockManager::DefaultAutoHideConfig);
        
            CDockManager::setConfigFlag(CDockManager::DragPreviewIsDynamic, true);
            CDockManager::setConfigFlag(CDockManager::DragPreviewShowsContentPixmap, true);
            CDockManager::setConfigFlag(CDockManager::DragPreviewHasWindowFrame, true);
            CDockManager::setAutoHideConfigFlag(CDockManager::AutoHideCloseButtonCollapsesDock, true);
          
        
            DockManager = new CDockManager(this);
        
            QTableWidget* Module = new QTableWidget();
            Module->setColumnCount(3);
            Module->setRowCount(10);
        
            CDockWidget* TableDockWidget = new CDockWidget("Module");
            TableDockWidget->setWidget(Module);
            
            TableDockWidget->setMinimumWidth(300);
            auto TableArea = DockManager->addDockWidget(DockWidgetArea::LeftDockWidgetArea, TableDockWidget);
            TableArea->setMinimumWidth(300);
        
            ui->menuView->addAction(TableDockWidget->toggleViewAction());
        
            QTableWidget* Module2 = new QTableWidget();
            Module2->setColumnCount(3);
            Module2->setRowCount(10);  
        
           //// Erstellen eines neuen GraphicsView
           // QGraphicsView* graphicsView = new QGraphicsView();
        
        
           // // Festlegen der Eigenschaften des GraphicsView
           // graphicsView->setScene(new QGraphicsScene());
           // graphicsView->setRenderHints(QPainter::Antialiasing);
           // // hinzufügen eines GraphicsRectItem in die GraphicsView
           // graphicsView->scene()->addItem(new QGraphicsRectItem(0, 0, 100, 100));
        
            // erstellen einer instanz von GraphicFlowClass
           // GraphicFlowClass* Module2 = new GraphicFlowClass();
        
            // erstellen des hauptfensters
        // Erstellen der Szene mit dem richtigen AbstractGraphModel
        
          /*  GraphicsSceneClass* scene = new GraphicsSceneClass(graphModel, parent);*/
        
        
        // Erstellen des Hauptfensters
            CDockWidget* MainWindow1 = new CDockWidget("MainWindow");
            
        
        
          //  std::shared_ptr<NodeDelegateModelRegistry> registry = registerDataModels();
         
            std::shared_ptr<NodeDelegateModelRegistry> registry = QtMainWindowClass::registerDataModels();
            QtMainWindowClass::setStyle();
            // erstellen eines Widgets
            QWidget* widget = new QWidget(MainWindow1);
        
        
        
        
        
            auto menuBar = new QMenuBar();
            QMenu* menu = menuBar->addMenu("File");
            auto saveAction = menu->addAction("Save Scene");
            auto loadAction = menu->addAction("Load Scene");
        
            QVBoxLayout* l = new QVBoxLayout(widget);
        
            DataFlowGraphModel dataFlowGraphModel(registry);
        
            l->addWidget(menuBar);
            auto scene = new DataFlowGraphicsScene(dataFlowGraphModel, widget);
        
            auto view = new GraphicsView(scene);
            l->addWidget(view);
            l->setContentsMargins(0, 0, 0, 0);
            l->setSpacing(0);
        
            QObject::connect(saveAction, &QAction::triggered, scene, &DataFlowGraphicsScene::save);
        
            QObject::connect(loadAction, &QAction::triggered, scene, &DataFlowGraphicsScene::load);
        
            QObject::connect(scene, &DataFlowGraphicsScene::sceneLoaded, view, &GraphicsView::centerScene);
        
        
            // Setzen der Ansicht als Widget des DockWidgets
            MainWindow1->setWidget(widget);
        
        
            // Setzen der minimun size auf die restliche Größe des Hauptfensters
            MainWindow1->setMinimumSizeHintMode(CDockWidget::MinimumSizeHintFromDockWidget);
        
            MainWindow1->setMinimumWidth(700);
            auto MainWindowArea = DockManager->addDockWidget(DockWidgetArea::RightDockWidgetArea, MainWindow1);
            MainWindowArea->setMinimumWidth(700);
        
            MainWindow1->showNormal();
        
            // Weitere Aktionen
            ui->menuView->addAction(MainWindow1->toggleViewAction());
        }
        
        QtMainWindowClass::~QtMainWindowClass()
        {
            delete ui;
            
        }
        

        Im CDockWidget* MainWindow1... versuche ich es einzubinden. Ich glaube das ich etwas falsch in der einbindung der klasse mache. der original main code ist:

        #include <QtNodes/ConnectionStyle>
        #include <QtNodes/DataFlowGraphModel>
        #include <QtNodes/DataFlowGraphicsScene>
        #include <QtNodes/GraphicsView>
        #include <QtNodes/NodeData>
        #include <QtNodes/NodeDelegateModelRegistry>
        
        #include <QtGui/QScreen>
        #include <QtWidgets/QApplication>
        #include <QtWidgets/QMenuBar>
        #include <QtWidgets/QVBoxLayout>
        
        #include <QtGui/QScreen>
        
        #include "AdditionModel.hpp"
        #include "DivisionModel.hpp"
        #include "MultiplicationModel.hpp"
        #include "NumberDisplayDataModel.hpp"
        #include "NumberSourceDataModel.hpp"
        #include "SubtractionModel.hpp"
        
        using QtNodes::ConnectionStyle;
        using QtNodes::DataFlowGraphicsScene;
        using QtNodes::DataFlowGraphModel;
        using QtNodes::GraphicsView;
        using QtNodes::NodeDelegateModelRegistry;
        
        static std::shared_ptr<NodeDelegateModelRegistry> registerDataModels()
        {
            auto ret = std::make_shared<NodeDelegateModelRegistry>();
            ret->registerModel<NumberSourceDataModel>("Sources");
        
            ret->registerModel<NumberDisplayDataModel>("Displays");
        
            ret->registerModel<AdditionModel>("Operators");
        
            ret->registerModel<SubtractionModel>("Operators");
        
            ret->registerModel<MultiplicationModel>("Operators");
        
            ret->registerModel<DivisionModel>("Operators");
        
            return ret;
        }
        
        static void setStyle()
        {
            ConnectionStyle::setConnectionStyle(
                R"(
          {
            "ConnectionStyle": {
              "ConstructionColor": "gray",
              "NormalColor": "black",
              "SelectedColor": "gray",
              "SelectedHaloColor": "deepskyblue",
              "HoveredColor": "deepskyblue",
        
              "LineWidth": 3.0,
              "ConstructionLineWidth": 2.0,
              "PointDiameter": 10.0,
        
              "UseDataDefinedColors": true
            }
          }
          )");
        }
        
        int main(int argc, char *argv[])
        {
            QApplication app(argc, argv);
        
            setStyle();
        
            std::shared_ptr<NodeDelegateModelRegistry> registry = registerDataModels();
        
            QWidget mainWidget;
        
            auto menuBar = new QMenuBar();
            QMenu *menu = menuBar->addMenu("File");
            auto saveAction = menu->addAction("Save Scene");
            auto loadAction = menu->addAction("Load Scene");
        
            QVBoxLayout *l = new QVBoxLayout(&mainWidget);
        
            DataFlowGraphModel dataFlowGraphModel(registry);
        
            l->addWidget(menuBar);
            auto scene = new DataFlowGraphicsScene(dataFlowGraphModel, &mainWidget);
        
            auto view = new GraphicsView(scene);
            l->addWidget(view);
            l->setContentsMargins(0, 0, 0, 0);
            l->setSpacing(0);
        
            QObject::connect(saveAction, &QAction::triggered, scene, &DataFlowGraphicsScene::save);
        
            QObject::connect(loadAction, &QAction::triggered, scene, &DataFlowGraphicsScene::load);
        
            QObject::connect(scene, &DataFlowGraphicsScene::sceneLoaded, view, &GraphicsView::centerScene);
        
            mainWidget.setWindowTitle("Data Flow: simplest calculator");
            mainWidget.resize(800, 600);
            // Center window.
            mainWidget.move(QApplication::primaryScreen()->availableGeometry().center()
                            - mainWidget.rect().center());
            mainWidget.showNormal();
        
            return app.exec();
        }
        

        Ich habe schon verschiedene Sachen ausprobiert, aber nix geht. Deshalb glaube ich das ich irgendwas in dem CDockWidget falsch mache was zu dem problem führt. Der Code wie ich es gemacht habe ist:

        // Erstellen des Hauptfensters
            CDockWidget* MainWindow1 = new CDockWidget("MainWindow");
            
        
        
          //  std::shared_ptr<NodeDelegateModelRegistry> registry = registerDataModels();
         
            std::shared_ptr<NodeDelegateModelRegistry> registry = QtMainWindowClass::registerDataModels();
            QtMainWindowClass::setStyle();
            // erstellen eines Widgets
            QWidget* widget = new QWidget(MainWindow1);
        
        
        
        
        
            auto menuBar = new QMenuBar();
            QMenu* menu = menuBar->addMenu("File");
            auto saveAction = menu->addAction("Save Scene");
            auto loadAction = menu->addAction("Load Scene");
        
            QVBoxLayout* l = new QVBoxLayout(widget);
        
            DataFlowGraphModel dataFlowGraphModel(registry);
        
            l->addWidget(menuBar);
            auto scene = new DataFlowGraphicsScene(dataFlowGraphModel, widget);
        
            auto view = new GraphicsView(scene);
            l->addWidget(view);
            l->setContentsMargins(0, 0, 0, 0);
            l->setSpacing(0);
        
            QObject::connect(saveAction, &QAction::triggered, scene, &DataFlowGraphicsScene::save);
        
            QObject::connect(loadAction, &QAction::triggered, scene, &DataFlowGraphicsScene::load);
        
            QObject::connect(scene, &DataFlowGraphicsScene::sceneLoaded, view, &GraphicsView::centerScene);
        
        
            // Setzen der Ansicht als Widget des DockWidgets
            MainWindow1->setWidget(widget);
        
        
            // Setzen der minimun size auf die restliche Größe des Hauptfensters
            MainWindow1->setMinimumSizeHintMode(CDockWidget::MinimumSizeHintFromDockWidget);
        
            MainWindow1->setMinimumWidth(700);
            auto MainWindowArea = DockManager->addDockWidget(DockWidgetArea::RightDockWidgetArea, MainWindow1);
            MainWindowArea->setMinimumWidth(700);
        
            MainWindow1->showNormal();
        
            // Weitere Aktionen
            ui->menuView->addAction(MainWindow1->toggleViewAction());
        

        Im Link ist das Projekt zum Downloaden(zip):
        Projekt
        Ich hoffe das mir Jemand helfen kann dieses Problem zu lösen. Danke

        Im rechten Fenster soll man mit der Rechten Maustaste drücken können dann erscheint eine auswahl der nodes. Programm1.png

        jsulmJ 1 Reply Last reply
        0
        • K Kirito Usaki

          Hallo,
          Ich habe ein MainWindow mit Qt-Advanced-Docking-System https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/blob/master/doc/user-guide.md#adding-auto-hide-widgets.
          In dem Dock Fenster will ich das calculator beispiel des nodeeditor einbauen https://github.com/paceholder/nodeeditor.
          Das beispiel funktioniert wenn ich es direkt in die main schreibe aber nicht wenn ich es in ein CDockWidget, da bekomme ich, wenn ich rechte maustaste drücke ein lesezugriffsverletzung in der memory: Ausgelöste Ausnahme: Lesezugriffsverletzung
          "this" war "0xFFFFFFFFFFFFFFF7".

          void _Incref() noexcept { // increment use count
                  _MT_INCR(_Uses);
              }
          
              void _Incwref
          

          Die QtMainWindowClass.h:

          #pragma once
          
          #include <QMainWindow>
          #include <QComboBox>
          #include <QWidgetAction>
          #include "DockManager.h"
          #include "DockAreaWidget.h"
          #include "DockWidget.h"
          
          #include <QWidget>
          #include <QGraphicsView>
          #include <QGraphicsScene>
          #include <QVBoxLayout>
          #include <QtCore>
          #include <QObject>
          #include <QtCore/qglobal.h>
          
          #include <memory>
          
          #include <QtNodes/ConnectionStyle>
          #include <QtNodes/DataFlowGraphModel>
          #include <QtNodes/DataFlowGraphicsScene>
          #include <QtNodes/GraphicsView>
          #include <QtNodes/NodeData>
          #include <QtNodes/NodeDelegateModelRegistry>
          
          #include <QtGui/QScreen>
          #include <QtWidgets/QApplication>
          #include <QtWidgets/QMenuBar>
          #include <QtWidgets/QVBoxLayout>
          
          #include <QtGui/QScreen>
          
          #include "AdditionModel.h"
          #include "DivisionModel.h"
          #include "MultiplicationModel.h"
          #include "NumberDisplayDataModel.h"
          #include "NumberSourceDataModel.h"
          #include "SubtractionModel.h"
          
          using QtNodes::ConnectionStyle;
          using QtNodes::DataFlowGraphicsScene;
          using QtNodes::DataFlowGraphModel;
          using QtNodes::GraphicsView;
          using QtNodes::NodeDelegateModelRegistry;
          
          QT_BEGIN_NAMESPACE
          namespace Ui { class QtMainWindowClass; };
          
          QT_END_NAMESPACE
          
          class QtMainWindowClass : public QMainWindow
          {
              Q_OBJECT
          
          public:
              QtMainWindowClass(QWidget* parent = nullptr);
              ~QtMainWindowClass();
          
              static std::shared_ptr<NodeDelegateModelRegistry> registerDataModels();
              static void setStyle();
          
          
          private:
              Ui::QtMainWindowClass* ui;
          
              ads::CDockManager* DockManager;
          };
          
          #include "QtMainWindowClass.h"
          #include "ui_QtMainWindowClass.h"
          
          #include "AutoHideDockContainer.h"
          #include "DockAreaWidget.h"
          #include "DockAreaTitleBar.h"
          
          #include <QTableWidget>
          
          #include <QtNodes/ConnectionStyle>
          #include <QtNodes/DataFlowGraphModel>
          #include <QtNodes/DataFlowGraphicsScene>
          #include <QtNodes/GraphicsView>
          #include <QtNodes/NodeData>
          #include <QtNodes/NodeDelegateModelRegistry>
          
          #include <QtGui/QScreen>
          #include <QtWidgets/QApplication>
          #include <QtWidgets/QMenuBar>
          #include <QtWidgets/QVBoxLayout>
          
          #include <QtGui/QScreen>
          
          #include "AdditionModel.h"
          #include "DivisionModel.h"
          #include "MultiplicationModel.h"
          #include "NumberDisplayDataModel.h"
          #include "NumberSourceDataModel.h"
          #include "SubtractionModel.h"
          
          #include <QApplication>
          
          using namespace ads;
          
          using QtNodes::ConnectionStyle;
          using QtNodes::DataFlowGraphicsScene;
          using QtNodes::DataFlowGraphModel;
          using QtNodes::GraphicsView;
          using QtNodes::NodeDelegateModelRegistry;
          
          std::shared_ptr<NodeDelegateModelRegistry> QtMainWindowClass::registerDataModels()
          {
              auto ret = std::make_shared<NodeDelegateModelRegistry>();
              ret->registerModel<NumberSourceDataModel>("Sources");
          
              ret->registerModel<NumberDisplayDataModel>("Displays");
          
              ret->registerModel<AdditionModel>("Operators");
          
              ret->registerModel<SubtractionModel>("Operators");
          
              ret->registerModel<MultiplicationModel>("Operators");
          
              ret->registerModel<DivisionModel>("Operators");
          
              return ret;
          }
          
          
          
          void QtMainWindowClass::setStyle()
          {
              ConnectionStyle::setConnectionStyle(
                  R"(
            {
              "ConnectionStyle": {
                "ConstructionColor": "gray",
                "NormalColor": "black",
                "SelectedColor": "gray",
                "SelectedHaloColor": "deepskyblue",
                "HoveredColor": "deepskyblue",
          
                "LineWidth": 3.0,
                "ConstructionLineWidth": 2.0,
                "PointDiameter": 10.0,
          
                "UseDataDefinedColors": true
              }
            }
            )");
          }
          
          QtMainWindowClass::QtMainWindowClass(QWidget* parent)
              : QMainWindow(parent)
              , ui(new Ui::QtMainWindowClass)
              
          {
              ui->setupUi(this);
          
              CDockManager::setConfigFlag(CDockManager::OpaqueSplitterResize, true);
              CDockManager::setConfigFlag(CDockManager::XmlCompressionEnabled, false);
              CDockManager::setConfigFlag(CDockManager::FocusHighlighting, true);
              CDockManager::setAutoHideConfigFlags(CDockManager::DefaultAutoHideConfig);
          
              CDockManager::setConfigFlag(CDockManager::DragPreviewIsDynamic, true);
              CDockManager::setConfigFlag(CDockManager::DragPreviewShowsContentPixmap, true);
              CDockManager::setConfigFlag(CDockManager::DragPreviewHasWindowFrame, true);
              CDockManager::setAutoHideConfigFlag(CDockManager::AutoHideCloseButtonCollapsesDock, true);
            
          
              DockManager = new CDockManager(this);
          
              QTableWidget* Module = new QTableWidget();
              Module->setColumnCount(3);
              Module->setRowCount(10);
          
              CDockWidget* TableDockWidget = new CDockWidget("Module");
              TableDockWidget->setWidget(Module);
              
              TableDockWidget->setMinimumWidth(300);
              auto TableArea = DockManager->addDockWidget(DockWidgetArea::LeftDockWidgetArea, TableDockWidget);
              TableArea->setMinimumWidth(300);
          
              ui->menuView->addAction(TableDockWidget->toggleViewAction());
          
              QTableWidget* Module2 = new QTableWidget();
              Module2->setColumnCount(3);
              Module2->setRowCount(10);  
          
             //// Erstellen eines neuen GraphicsView
             // QGraphicsView* graphicsView = new QGraphicsView();
          
          
             // // Festlegen der Eigenschaften des GraphicsView
             // graphicsView->setScene(new QGraphicsScene());
             // graphicsView->setRenderHints(QPainter::Antialiasing);
             // // hinzufügen eines GraphicsRectItem in die GraphicsView
             // graphicsView->scene()->addItem(new QGraphicsRectItem(0, 0, 100, 100));
          
              // erstellen einer instanz von GraphicFlowClass
             // GraphicFlowClass* Module2 = new GraphicFlowClass();
          
              // erstellen des hauptfensters
          // Erstellen der Szene mit dem richtigen AbstractGraphModel
          
            /*  GraphicsSceneClass* scene = new GraphicsSceneClass(graphModel, parent);*/
          
          
          // Erstellen des Hauptfensters
              CDockWidget* MainWindow1 = new CDockWidget("MainWindow");
              
          
          
            //  std::shared_ptr<NodeDelegateModelRegistry> registry = registerDataModels();
           
              std::shared_ptr<NodeDelegateModelRegistry> registry = QtMainWindowClass::registerDataModels();
              QtMainWindowClass::setStyle();
              // erstellen eines Widgets
              QWidget* widget = new QWidget(MainWindow1);
          
          
          
          
          
              auto menuBar = new QMenuBar();
              QMenu* menu = menuBar->addMenu("File");
              auto saveAction = menu->addAction("Save Scene");
              auto loadAction = menu->addAction("Load Scene");
          
              QVBoxLayout* l = new QVBoxLayout(widget);
          
              DataFlowGraphModel dataFlowGraphModel(registry);
          
              l->addWidget(menuBar);
              auto scene = new DataFlowGraphicsScene(dataFlowGraphModel, widget);
          
              auto view = new GraphicsView(scene);
              l->addWidget(view);
              l->setContentsMargins(0, 0, 0, 0);
              l->setSpacing(0);
          
              QObject::connect(saveAction, &QAction::triggered, scene, &DataFlowGraphicsScene::save);
          
              QObject::connect(loadAction, &QAction::triggered, scene, &DataFlowGraphicsScene::load);
          
              QObject::connect(scene, &DataFlowGraphicsScene::sceneLoaded, view, &GraphicsView::centerScene);
          
          
              // Setzen der Ansicht als Widget des DockWidgets
              MainWindow1->setWidget(widget);
          
          
              // Setzen der minimun size auf die restliche Größe des Hauptfensters
              MainWindow1->setMinimumSizeHintMode(CDockWidget::MinimumSizeHintFromDockWidget);
          
              MainWindow1->setMinimumWidth(700);
              auto MainWindowArea = DockManager->addDockWidget(DockWidgetArea::RightDockWidgetArea, MainWindow1);
              MainWindowArea->setMinimumWidth(700);
          
              MainWindow1->showNormal();
          
              // Weitere Aktionen
              ui->menuView->addAction(MainWindow1->toggleViewAction());
          }
          
          QtMainWindowClass::~QtMainWindowClass()
          {
              delete ui;
              
          }
          

          Im CDockWidget* MainWindow1... versuche ich es einzubinden. Ich glaube das ich etwas falsch in der einbindung der klasse mache. der original main code ist:

          #include <QtNodes/ConnectionStyle>
          #include <QtNodes/DataFlowGraphModel>
          #include <QtNodes/DataFlowGraphicsScene>
          #include <QtNodes/GraphicsView>
          #include <QtNodes/NodeData>
          #include <QtNodes/NodeDelegateModelRegistry>
          
          #include <QtGui/QScreen>
          #include <QtWidgets/QApplication>
          #include <QtWidgets/QMenuBar>
          #include <QtWidgets/QVBoxLayout>
          
          #include <QtGui/QScreen>
          
          #include "AdditionModel.hpp"
          #include "DivisionModel.hpp"
          #include "MultiplicationModel.hpp"
          #include "NumberDisplayDataModel.hpp"
          #include "NumberSourceDataModel.hpp"
          #include "SubtractionModel.hpp"
          
          using QtNodes::ConnectionStyle;
          using QtNodes::DataFlowGraphicsScene;
          using QtNodes::DataFlowGraphModel;
          using QtNodes::GraphicsView;
          using QtNodes::NodeDelegateModelRegistry;
          
          static std::shared_ptr<NodeDelegateModelRegistry> registerDataModels()
          {
              auto ret = std::make_shared<NodeDelegateModelRegistry>();
              ret->registerModel<NumberSourceDataModel>("Sources");
          
              ret->registerModel<NumberDisplayDataModel>("Displays");
          
              ret->registerModel<AdditionModel>("Operators");
          
              ret->registerModel<SubtractionModel>("Operators");
          
              ret->registerModel<MultiplicationModel>("Operators");
          
              ret->registerModel<DivisionModel>("Operators");
          
              return ret;
          }
          
          static void setStyle()
          {
              ConnectionStyle::setConnectionStyle(
                  R"(
            {
              "ConnectionStyle": {
                "ConstructionColor": "gray",
                "NormalColor": "black",
                "SelectedColor": "gray",
                "SelectedHaloColor": "deepskyblue",
                "HoveredColor": "deepskyblue",
          
                "LineWidth": 3.0,
                "ConstructionLineWidth": 2.0,
                "PointDiameter": 10.0,
          
                "UseDataDefinedColors": true
              }
            }
            )");
          }
          
          int main(int argc, char *argv[])
          {
              QApplication app(argc, argv);
          
              setStyle();
          
              std::shared_ptr<NodeDelegateModelRegistry> registry = registerDataModels();
          
              QWidget mainWidget;
          
              auto menuBar = new QMenuBar();
              QMenu *menu = menuBar->addMenu("File");
              auto saveAction = menu->addAction("Save Scene");
              auto loadAction = menu->addAction("Load Scene");
          
              QVBoxLayout *l = new QVBoxLayout(&mainWidget);
          
              DataFlowGraphModel dataFlowGraphModel(registry);
          
              l->addWidget(menuBar);
              auto scene = new DataFlowGraphicsScene(dataFlowGraphModel, &mainWidget);
          
              auto view = new GraphicsView(scene);
              l->addWidget(view);
              l->setContentsMargins(0, 0, 0, 0);
              l->setSpacing(0);
          
              QObject::connect(saveAction, &QAction::triggered, scene, &DataFlowGraphicsScene::save);
          
              QObject::connect(loadAction, &QAction::triggered, scene, &DataFlowGraphicsScene::load);
          
              QObject::connect(scene, &DataFlowGraphicsScene::sceneLoaded, view, &GraphicsView::centerScene);
          
              mainWidget.setWindowTitle("Data Flow: simplest calculator");
              mainWidget.resize(800, 600);
              // Center window.
              mainWidget.move(QApplication::primaryScreen()->availableGeometry().center()
                              - mainWidget.rect().center());
              mainWidget.showNormal();
          
              return app.exec();
          }
          

          Ich habe schon verschiedene Sachen ausprobiert, aber nix geht. Deshalb glaube ich das ich irgendwas in dem CDockWidget falsch mache was zu dem problem führt. Der Code wie ich es gemacht habe ist:

          // Erstellen des Hauptfensters
              CDockWidget* MainWindow1 = new CDockWidget("MainWindow");
              
          
          
            //  std::shared_ptr<NodeDelegateModelRegistry> registry = registerDataModels();
           
              std::shared_ptr<NodeDelegateModelRegistry> registry = QtMainWindowClass::registerDataModels();
              QtMainWindowClass::setStyle();
              // erstellen eines Widgets
              QWidget* widget = new QWidget(MainWindow1);
          
          
          
          
          
              auto menuBar = new QMenuBar();
              QMenu* menu = menuBar->addMenu("File");
              auto saveAction = menu->addAction("Save Scene");
              auto loadAction = menu->addAction("Load Scene");
          
              QVBoxLayout* l = new QVBoxLayout(widget);
          
              DataFlowGraphModel dataFlowGraphModel(registry);
          
              l->addWidget(menuBar);
              auto scene = new DataFlowGraphicsScene(dataFlowGraphModel, widget);
          
              auto view = new GraphicsView(scene);
              l->addWidget(view);
              l->setContentsMargins(0, 0, 0, 0);
              l->setSpacing(0);
          
              QObject::connect(saveAction, &QAction::triggered, scene, &DataFlowGraphicsScene::save);
          
              QObject::connect(loadAction, &QAction::triggered, scene, &DataFlowGraphicsScene::load);
          
              QObject::connect(scene, &DataFlowGraphicsScene::sceneLoaded, view, &GraphicsView::centerScene);
          
          
              // Setzen der Ansicht als Widget des DockWidgets
              MainWindow1->setWidget(widget);
          
          
              // Setzen der minimun size auf die restliche Größe des Hauptfensters
              MainWindow1->setMinimumSizeHintMode(CDockWidget::MinimumSizeHintFromDockWidget);
          
              MainWindow1->setMinimumWidth(700);
              auto MainWindowArea = DockManager->addDockWidget(DockWidgetArea::RightDockWidgetArea, MainWindow1);
              MainWindowArea->setMinimumWidth(700);
          
              MainWindow1->showNormal();
          
              // Weitere Aktionen
              ui->menuView->addAction(MainWindow1->toggleViewAction());
          

          Im Link ist das Projekt zum Downloaden(zip):
          Projekt
          Ich hoffe das mir Jemand helfen kann dieses Problem zu lösen. Danke

          Im rechten Fenster soll man mit der Rechten Maustaste drücken können dann erscheint eine auswahl der nodes. Programm1.png

          jsulmJ Offline
          jsulmJ Offline
          jsulm
          Lifetime Qt Champion
          wrote on last edited by
          #4

          @Kirito-Usaki Bitte im Debugger laufen lassen und den Stacktrace nach dem Crash posten.

          https://forum.qt.io/topic/113070/qt-code-of-conduct

          K 1 Reply Last reply
          0
          • jsulmJ jsulm

            @Kirito-Usaki Bitte im Debugger laufen lassen und den Stacktrace nach dem Crash posten.

            K Offline
            K Offline
            Kirito Usaki
            wrote on last edited by
            #5

            @jsulm

            >	QtNodes.dll!std::_Ref_count_base::_Incref() Zeile 1169	C++
             	QtNodes.dll!std::_Ptr_base<QtNodes::NodeDelegateModelRegistry>::_Incref() Zeile 1399	C++
             	QtNodes.dll!std::_Ptr_base<QtNodes::NodeDelegateModelRegistry>::_Copy_construct_from<QtNodes::NodeDelegateModelRegistry>(const std::shared_ptr<QtNodes::NodeDelegateModelRegistry> & _Other) Zeile 1357	C++
             	QtNodes.dll!std::shared_ptr<QtNodes::NodeDelegateModelRegistry>::shared_ptr<QtNodes::NodeDelegateModelRegistry>(const std::shared_ptr<QtNodes::NodeDelegateModelRegistry> & _Other) Zeile 1633	C++
             	QtNodes.dll!QtNodes::DataFlowGraphModel::dataModelRegistry() Zeile 31	C++
             	QtNodes.dll!QtNodes::DataFlowGraphicsScene::createSceneMenu(const QPointF scenePos) Zeile 85	C++
             	QtNodes.dll!QtNodes::GraphicsView::contextMenuEvent(QContextMenuEvent * event) Zeile 173	C++
             	Qt6Widgetsd.dll!QWidget::event(QEvent * event) Zeile 9091	C++
             	Qt6Widgetsd.dll!QFrame::event(QEvent * e) Zeile 515	C++
             	Qt6Widgetsd.dll!QAbstractScrollArea::viewportEvent(QEvent * e) Zeile 1066	C++
             	Qt6Widgetsd.dll!QGraphicsView::viewportEvent(QEvent * event) Zeile 2938	C++
             	Qt6Widgetsd.dll!QAbstractScrollAreaPrivate::viewportEvent(QEvent * event) Zeile 74	C++
             	Qt6Widgetsd.dll!QAbstractScrollAreaFilter::eventFilter(QObject * o, QEvent * e) Zeile 85	C++
             	Qt6Cored.dll!QCoreApplicationPrivate::sendThroughObjectEventFilters(QObject * receiver, QEvent * event) Zeile 1247	C++
             	Qt6Widgetsd.dll!QApplicationPrivate::notify_helper(QObject * receiver, QEvent * e) Zeile 3278	C++
             	Qt6Widgetsd.dll!QApplication::notify(QObject * receiver, QEvent * e) Zeile 2913	C++
             	Qt6Cored.dll!QCoreApplication::notifyInternal2(QObject * receiver, QEvent * event) Zeile 1115	C++
             	Qt6Cored.dll!QCoreApplication::forwardEvent(QObject * receiver, QEvent * event, QEvent * originatingEvent) Zeile 1131	C++
             	Qt6Widgetsd.dll!QWidgetWindow::handleMouseEvent(QMouseEvent * event) Zeile 632	C++
             	Qt6Widgetsd.dll!QWidgetWindow::event(QEvent * event) Zeile 242	C++
             	Qt6Widgetsd.dll!QApplicationPrivate::notify_helper(QObject * receiver, QEvent * e) Zeile 3284	C++
             	Qt6Widgetsd.dll!QApplication::notify(QObject * receiver, QEvent * e) Zeile 3235	C++
             	Qt6Cored.dll!QCoreApplication::notifyInternal2(QObject * receiver, QEvent * event) Zeile 1115	C++
             	Qt6Cored.dll!QCoreApplication::sendSpontaneousEvent(QObject * receiver, QEvent * event) Zeile 1548	C++
             	Qt6Guid.dll!QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent * e) Zeile 2278	C++
             	Qt6Guid.dll!QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent * e) Zeile 2027	C++
             	Qt6Guid.dll!QWindowSystemInterface::sendWindowSystemEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Zeile 1100	C++
             	Qt6Guid.dll!QWindowsGuiEventDispatcher::sendPostedEvents() Zeile 45	C++
             	Qt6Cored.dll!QEventDispatcherWin32::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Zeile 464	C++
             	Qt6Guid.dll!QWindowsGuiEventDispatcher::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Zeile 36	C++
             	Qt6Cored.dll!QEventLoop::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Zeile 101	C++
             	Qt6Cored.dll!QEventLoop::exec(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Zeile 182	C++
             	Qt6Cored.dll!QCoreApplication::exec() Zeile 1436	C++
             	Qt6Guid.dll!QGuiApplication::exec() Zeile 1887	C++
             	Qt6Widgetsd.dll!QApplication::exec() Zeile 2565	C++
             	Qt-node-cpm.exe!main(int argc, char * * argv) Zeile 179	C++
             	Qt-node-cpm.exe!qtEntryPoint() Zeile 50	C++
             	Qt-node-cpm.exe!WinMain(HINSTANCE__ * __formal, HINSTANCE__ * __formal, char * __formal, int __formal) Zeile 60	C++
             	Qt-node-cpm.exe!invoke_main() Zeile 107	C++
             	Qt-node-cpm.exe!__scrt_common_main_seh() Zeile 288	C++
             	Qt-node-cpm.exe!__scrt_common_main() Zeile 331	C++
             	Qt-node-cpm.exe!WinMainCRTStartup(void * __formal) Zeile 17	C++
             	kernel32.dll!00007ffda56d257d()	Unbekannt
             	ntdll.dll!00007ffda674aa78()	Unbekannt
            
            1 Reply Last reply
            0

            • Login

            • Login or register to search.
            • First post
              Last post
            0
            • Categories
            • Recent
            • Tags
            • Popular
            • Users
            • Groups
            • Search
            • Get Qt Extensions
            • Unsolved