Conductor is an herited class of QGraphicsObject, instead of QObject and QGraphicsPathItem

git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@5371 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
blacksun
2018-05-18 19:36:27 +00:00
parent cc9184c0b6
commit bca58fa555
2 changed files with 43 additions and 19 deletions

View File

@@ -73,8 +73,6 @@ class ConductorXmlRetroCompatibility
* @param p2 : second terminal of this conductor. * @param p2 : second terminal of this conductor.
*/ */
Conductor::Conductor(Terminal *p1, Terminal* p2) : Conductor::Conductor(Terminal *p1, Terminal* p2) :
QObject(),
QGraphicsPathItem(nullptr),
terminal1(p1), terminal1(p1),
terminal2(p2), terminal2(p2),
m_mouse_over(false), m_mouse_over(false),
@@ -167,7 +165,7 @@ void Conductor::updatePath(const QRectF &rect) {
else else
generateConductorPath(p1, terminal1 -> orientation(), p2, terminal2 -> orientation()); generateConductorPath(p1, terminal1 -> orientation(), p2, terminal2 -> orientation());
calculateTextItemPosition(); calculateTextItemPosition();
QGraphicsPathItem::update(rect); QGraphicsObject::update(rect);
} }
/** /**
@@ -608,7 +606,7 @@ void Conductor::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) {
*/ */
void Conductor::mousePressEvent(QGraphicsSceneMouseEvent *event) void Conductor::mousePressEvent(QGraphicsSceneMouseEvent *event)
{ {
QGraphicsPathItem::mousePressEvent(event); QGraphicsObject::mousePressEvent(event);
if (event->modifiers() & Qt::ControlModifier) if (event->modifiers() & Qt::ControlModifier)
setSelected(!isSelected()); setSelected(!isSelected());
@@ -621,7 +619,7 @@ void Conductor::mousePressEvent(QGraphicsSceneMouseEvent *event)
void Conductor::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) void Conductor::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{ {
if (!(event -> modifiers() & Qt::ControlModifier)) if (!(event -> modifiers() & Qt::ControlModifier))
QGraphicsPathItem::mouseReleaseEvent(event); QGraphicsObject::mouseReleaseEvent(event);
} }
/** /**
@@ -684,7 +682,7 @@ QVariant Conductor::itemChange(GraphicsItemChange change, const QVariant &value)
adjusteHandlerPos(); adjusteHandlerPos();
} }
return(QGraphicsPathItem::itemChange(change, value)); return(QGraphicsObject::itemChange(change, value));
} }
/** /**
@@ -1443,6 +1441,21 @@ void Conductor::refreshText()
} }
} }
void Conductor::setPath(const QPainterPath &path)
{
if(path == m_path)
return;
prepareGeometryChange();
m_path = path;
update();
}
QPainterPath Conductor::path() const
{
return m_path;
}
/** /**
* @brief Conductor::setPropertiesToPotential * @brief Conductor::setPropertiesToPotential
* @param properties * @param properties
@@ -1723,8 +1736,10 @@ QList<QPointF> Conductor::junctions() const {
// determine si le point est une bifurcation ou non // determine si le point est une bifurcation ou non
bool is_bend = false; bool is_bend = false;
Qt::Corner current_bend_type = Qt::TopLeftCorner; Qt::Corner current_bend_type = Qt::TopLeftCorner;
foreach(ConductorBend cb, bends_list) { foreach(ConductorBend cb, bends_list)
if (cb.first == point) { {
if (cb.first == point)
{
is_bend = true; is_bend = true;
current_bend_type = cb.second; current_bend_type = cb.second;
break; break;
@@ -1735,22 +1750,28 @@ QList<QPointF> Conductor::junctions() const {
bool is_junction = false; bool is_junction = false;
QPointF scene_point = mapToScene(point); QPointF scene_point = mapToScene(point);
foreach(Conductor *c, other_conductors) { foreach(Conductor *c, other_conductors)
// exprime le point dans les coordonnees de l'autre conducteur {
// exprime le point dans les coordonnees de l'autre conducteur
QPointF conductor_point = c -> mapFromScene(scene_point); QPointF conductor_point = c -> mapFromScene(scene_point);
// recupere les segments de l'autre conducteur // recupere les segments de l'autre conducteur
QList<ConductorSegment *> c_segments = c -> segmentsList(); QList<ConductorSegment *> c_segments = c -> segmentsList();
if (c_segments.isEmpty()) continue; if (c_segments.isEmpty())
// parcoure les segments a la recherche d'un point commun continue;
for (int j = 0 ; j < c_segments.count() ; ++ j) { // parcoure les segments a la recherche d'un point commun
for (int j = 0 ; j < c_segments.count() ; ++ j)
{
ConductorSegment *segment = c_segments[j]; ConductorSegment *segment = c_segments[j];
// un point commun a ete trouve sur ce segment // un point commun a ete trouve sur ce segment
if (isContained(conductor_point, segment -> firstPoint(), segment -> secondPoint())) { if (isContained(conductor_point, segment -> firstPoint(), segment -> secondPoint()))
{
is_junction = true; is_junction = true;
// ce point commun ne doit pas etre une bifurcation identique a celle-ci // ce point commun ne doit pas etre une bifurcation identique a celle-ci
QList<ConductorBend> other_conductor_bends = c -> bends(); QList<ConductorBend> other_conductor_bends = c -> bends();
foreach(ConductorBend cb, other_conductor_bends) { foreach(ConductorBend cb, other_conductor_bends)
if (cb.first == conductor_point && cb.second == current_bend_type) { {
if (cb.first == conductor_point && cb.second == current_bend_type)
{
is_junction = false; is_junction = false;
} }
} }

View File

@@ -39,7 +39,7 @@ typedef QHash<Qt::Corner, ConductorProfile> ConductorProfilesGroup;
This class represents a conductor, i.e. a wire between two element This class represents a conductor, i.e. a wire between two element
terminals. terminals.
*/ */
class Conductor : public QObject, public QGraphicsPathItem class Conductor : public QGraphicsObject
{ {
Q_OBJECT Q_OBJECT
@@ -90,6 +90,8 @@ class Conductor : public QObject, public QGraphicsPathItem
ConductorSegment *middleSegment(); ConductorSegment *middleSegment();
QPointF posForText(Qt::Orientations &flag); QPointF posForText(Qt::Orientations &flag);
void refreshText(); void refreshText();
void setPath(const QPainterPath &path);
QPainterPath path() const;
public: public:
static bool valideXml (QDomElement &); static bool valideXml (QDomElement &);
@@ -181,6 +183,7 @@ class Conductor : public QObject, public QGraphicsPathItem
static QPen conductor_pen; static QPen conductor_pen;
static QBrush conductor_brush; static QBrush conductor_brush;
static bool pen_and_brush_initialized; static bool pen_and_brush_initialized;
QPainterPath m_path;
private: private:
void segmentsToPath(); void segmentsToPath();