amartinis
7th September 2017, 22:38
Hello, this is my very first post.
I have moved from other languages to PyQt several years ago and now wish to reimplement several systems on Qt with C++.
I have stumbled upon a SEGFAULT that I could trace here:
void QScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event){
QGraphicsScene:mouseMoveEvent(event);
}
I am in the process of subclassing a QGraphicsScene. Relevant Code below:
HEADER
#ifndef QSCENE_H
#define QSCENE_H
#include "itemspanel.h"
#include "QGraphicsScene"
#include "QtCore/Qt"
#include "QColor"
class QScene : public QGraphicsScene
{
Q_OBJECT
public:
explicit QScene(QGraphicsScene* parent = 0);
~QScene();
ItemsPanel *panel;
int miModo;
int modoGoma;
int modoLinea;
int modoFluo;
int modoLineaH;
int modoRect;
QPointF inicio;
QPointF fin;
int x = 0;
int y = 0;
QColor brushColor;
QColor penColor;
int penWidth;
int pen1;
int pen2;
int pen3;
int pen4;
void fmodoGoma();
void fmodoRect();
void fmodoLinea();
void fmodoLineaH();
void fmodoFluo();
void fmodoPen1();
void fmodoPen2();
void fmodoPen3();
void fmodoPen4();
void fmodoColorRojo();
void fmodoColorAzul();
void fmodoColorVerde();
void fmodoColorNaranja();
void fmodoColorAmarillo();
void fmodoColorNegro();
void guardar();
void eliminarItemsSeleccionados();
void levantarCapaTexto(QString);
virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event);
virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
};
#endif // QSCENE_H
CODE
#include "qscene.h"
#include "QGraphicsScene"
#include "itemspanel.h"
#include "QPointF"
#include "QtCore/Qt"
#include "QColor"
#include "QGraphicsTextItem"
#include "QGraphicsSceneMouseEvent"
#include "QGraphicsRectItem"
#include "QGraphicsLineItem"
#include "QPen"
#include "QBrush"
QScene::QScene(QGraphicsScene *parent):
QGraphicsScene(parent)
{
ItemsPanel *panel = 0;
}
QScene::~QScene()
{
delete panel;
}
void QScene::mouseDoubleClickEvent(QGraphicsSceneMouseE vent *event){
QGraphicsTextItem *txtItem = new QGraphicsTextItem("...");
txtItem->setPos(event->scenePos());
txtItem->setTextInteractionFlags(Qt::TextSelectableByMouse | Qt::TextSelectableByKeyboard | Qt::TextEditable);
txtItem->setFlag(QGraphicsItem::ItemIsMovable);
txtItem->setFlag(QGraphicsItem::ItemIsSelectable);
txtItem->setFlag(QGraphicsItem::ItemSendsGeometryChanges);
txtItem->setFont(QFont("Lucida Console",19));
this->addItem(txtItem);
txtItem->setFocus();
QGraphicsScene::mouseDoubleClickEvent(event);
}
void QScene::mousePressEvent(QGraphicsSceneMouseEvent *event){
this->x = event->scenePos().x();
this->y = event->scenePos().y();
QGraphicsScene::mousePressEvent(event);
}
void QScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event){
QGraphicsScene:mouseMoveEvent(event);
}
void QScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *event){
if(miModo==modoRect){
QGraphicsRectItem *rect = new QGraphicsRectItem(x,y,event->scenePos().x()-x,event->scenePos().y()-y);
QPen pen ;
pen.setColor(penColor);
pen.setWidth(penWidth);
rect->setPen(pen);
rect->setFlag(QGraphicsItem::ItemIsMovable);
rect->setFlag(QGraphicsItem::ItemIsSelectable);
rect->setFlag(QGraphicsItem::ItemSendsGeometryChanges);
this->addItem(rect);
miModo = 0 ;
guardar();
QGraphicsScene:mouseReleaseEvent(event);
}
The mouse move event gets called hundreds of times and finally a segmentation fault occurs. I do not have idea as to why. Can someone provide some clues?
Regards!
I have moved from other languages to PyQt several years ago and now wish to reimplement several systems on Qt with C++.
I have stumbled upon a SEGFAULT that I could trace here:
void QScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event){
QGraphicsScene:mouseMoveEvent(event);
}
I am in the process of subclassing a QGraphicsScene. Relevant Code below:
HEADER
#ifndef QSCENE_H
#define QSCENE_H
#include "itemspanel.h"
#include "QGraphicsScene"
#include "QtCore/Qt"
#include "QColor"
class QScene : public QGraphicsScene
{
Q_OBJECT
public:
explicit QScene(QGraphicsScene* parent = 0);
~QScene();
ItemsPanel *panel;
int miModo;
int modoGoma;
int modoLinea;
int modoFluo;
int modoLineaH;
int modoRect;
QPointF inicio;
QPointF fin;
int x = 0;
int y = 0;
QColor brushColor;
QColor penColor;
int penWidth;
int pen1;
int pen2;
int pen3;
int pen4;
void fmodoGoma();
void fmodoRect();
void fmodoLinea();
void fmodoLineaH();
void fmodoFluo();
void fmodoPen1();
void fmodoPen2();
void fmodoPen3();
void fmodoPen4();
void fmodoColorRojo();
void fmodoColorAzul();
void fmodoColorVerde();
void fmodoColorNaranja();
void fmodoColorAmarillo();
void fmodoColorNegro();
void guardar();
void eliminarItemsSeleccionados();
void levantarCapaTexto(QString);
virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event);
virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
};
#endif // QSCENE_H
CODE
#include "qscene.h"
#include "QGraphicsScene"
#include "itemspanel.h"
#include "QPointF"
#include "QtCore/Qt"
#include "QColor"
#include "QGraphicsTextItem"
#include "QGraphicsSceneMouseEvent"
#include "QGraphicsRectItem"
#include "QGraphicsLineItem"
#include "QPen"
#include "QBrush"
QScene::QScene(QGraphicsScene *parent):
QGraphicsScene(parent)
{
ItemsPanel *panel = 0;
}
QScene::~QScene()
{
delete panel;
}
void QScene::mouseDoubleClickEvent(QGraphicsSceneMouseE vent *event){
QGraphicsTextItem *txtItem = new QGraphicsTextItem("...");
txtItem->setPos(event->scenePos());
txtItem->setTextInteractionFlags(Qt::TextSelectableByMouse | Qt::TextSelectableByKeyboard | Qt::TextEditable);
txtItem->setFlag(QGraphicsItem::ItemIsMovable);
txtItem->setFlag(QGraphicsItem::ItemIsSelectable);
txtItem->setFlag(QGraphicsItem::ItemSendsGeometryChanges);
txtItem->setFont(QFont("Lucida Console",19));
this->addItem(txtItem);
txtItem->setFocus();
QGraphicsScene::mouseDoubleClickEvent(event);
}
void QScene::mousePressEvent(QGraphicsSceneMouseEvent *event){
this->x = event->scenePos().x();
this->y = event->scenePos().y();
QGraphicsScene::mousePressEvent(event);
}
void QScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event){
QGraphicsScene:mouseMoveEvent(event);
}
void QScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *event){
if(miModo==modoRect){
QGraphicsRectItem *rect = new QGraphicsRectItem(x,y,event->scenePos().x()-x,event->scenePos().y()-y);
QPen pen ;
pen.setColor(penColor);
pen.setWidth(penWidth);
rect->setPen(pen);
rect->setFlag(QGraphicsItem::ItemIsMovable);
rect->setFlag(QGraphicsItem::ItemIsSelectable);
rect->setFlag(QGraphicsItem::ItemSendsGeometryChanges);
this->addItem(rect);
miModo = 0 ;
guardar();
QGraphicsScene:mouseReleaseEvent(event);
}
The mouse move event gets called hundreds of times and finally a segmentation fault occurs. I do not have idea as to why. Can someone provide some clues?
Regards!