Hilfe bei Lesezugriffsverletzung
-
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_OBJECTpublic:
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)
-
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. -
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. DankeIm rechten Fenster soll man mit der Rechten Maustaste drücken können dann erscheint eine auswahl der nodes.
-
@Kirito-Usaki Bitte im Debugger laufen lassen und den Stacktrace nach dem Crash posten.
-
> 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