Qt Forum - programming with C++ and Qt
Register Calendar Members List Team Members Search Frequently Asked Questions Go to the Main Page

Qt Forum - programming with C++ and Qt » QtForum.org » Qt » Qt Programming » QGraphicsLineItem + setAcceptHoverEvents » Hello Guest [Login|Register]
Last Post | First Unread Post Print Page | Recommend to a Friend | Add Thread to Favorites
Post New Thread Post Reply
Go to the bottom of this page QGraphicsLineItem + setAcceptHoverEvents
Author
Post « Previous Thread | Next Thread »
N1Rulez N1Rulez is a male
Coder


Registration Date: 09.04.2008
Posts: 16

Level: 8 [?]
Experience: 605
Next Level: 674

69 points of experience needed for next level

QGraphicsLineItem + setAcceptHoverEvents Reply to this Post Post Reply with Quote Edit/Delete Posts Report Post to a Moderator       Go to the top of this page

Hey @all,

i'm trying to get the hover effect working for my QGraphicsLineItem object.
I have subclassed the QGraphicsLineItem class, and in the constructor i wrote:
code:
1:
2:
3:
setAcceptHoverEvents(true);


I implemented the protected functions like below:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
void Arrow::hoverEnterEvent(QGraphicsSceneHoverEvent * event) {
    //QGraphicsLineItem::hoverEnterEvent(event);
    qDebug() << "void Arrow::hoverEnterEvent(QGraphicsSceneHoverEvent * event)";
    pen().setColor(QColor(204, 0, 255, 76));
}

void Arrow::hoverLeaveEvent(QGraphicsSceneHoverEvent * event) {
    qDebug() << "void Arrow::hoverLeaveEvent(QGraphicsSceneHoverEvent * event)";
    pen().setColor(myColor);
}


But when i come over the line with my mouse pointer the functions doesn't be executed?

What i'am doing wrong? Can anybody help me.

Regards
N1Rulez
07.05.2008 20:02 N1Rulez is offline Send an Email to N1Rulez Search for Posts by N1Rulez Add N1Rulez to your Buddy List
N1Rulez N1Rulez is a male
Coder


Registration Date: 09.04.2008
Posts: 16

Level: 8 [?]
Experience: 605
Next Level: 674

69 points of experience needed for next level

Thread Starter Thread Started by N1Rulez
Reply to this Post Post Reply with Quote Edit/Delete Posts Report Post to a Moderator       Go to the top of this page

I forgot to say, I'm using QT 4.4.0 under Windows XP
07.05.2008 20:02 N1Rulez is offline Send an Email to N1Rulez Search for Posts by N1Rulez Add N1Rulez to your Buddy List
flowerJT flowerJT is a male
Leading Software Engineer


Registration Date: 03.02.2005
Posts: 62
Location: Berlin, Germany

Level: 24 [?]
Experience: 74,307
Next Level: 79,247

4,940 points of experience needed for next level

Reply to this Post Post Reply with Quote Edit/Delete Posts Report Post to a Moderator       Go to the top of this page

I think that the methods are called. The fact that you didn't see your output to stderr maybe caused that you added "windows" instead of "console" to your "CONFIG" qmake variable. It should work like this

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
void Arrow::hoverEnterEvent(QGraphicsSceneHoverEvent * event) {
    //QGraphicsLineItem::hoverEnterEvent(event);
    qDebug() << "void Arrow::hoverEnterEvent(QGraphicsSceneHoverEvent * event)";
    //pen().setColor(QColor(204, 0, 255, 76));
    this->setPen( QPen( QColor( 204, 0, 255, 76 ) );
    
    this->update();
}


Best regards
07.05.2008 20:58 flowerJT is offline Send an Email to flowerJT Search for Posts by flowerJT Add flowerJT to your Buddy List
N1Rulez N1Rulez is a male
Coder


Registration Date: 09.04.2008
Posts: 16

Level: 8 [?]
Experience: 605
Next Level: 674

69 points of experience needed for next level

Thread Starter Thread Started by N1Rulez
Reply to this Post Post Reply with Quote Edit/Delete Posts Report Post to a Moderator       Go to the top of this page

It doesn't work unhappy

by the way, normally i saw also qDebug() messages, because there are a tool called DebugView ( http://technet.microsoft.com/en-us/sysinternals/d46b4037-88ae-41d7-a41c-966
0d7d96cf2.aspx
), which work with signals and slots.

So, for other events (such as paint()) i saw the qDebug() output. But not for the Hover event. The line also doesn't change the color.

Is it a bug in QT 4.4.0? Or is there an other way to simulate an Hover Effect?

Regards
N1Rulez

This post has been edited 2 time(s), it was last edited by N1Rulez: 07.05.2008 22:14.

07.05.2008 21:35 N1Rulez is offline Send an Email to N1Rulez Search for Posts by N1Rulez Add N1Rulez to your Buddy List
Nicolas SOUCHON
Wizard


Registration Date: 27.06.2007
Posts: 735

Level: 29 [?]
Experience: 238,924
Next Level: 242,754

3,830 points of experience needed for next level

Reply to this Post Post Reply with Quote Edit/Delete Posts Report Post to a Moderator       Go to the top of this page

only the code concerning QGraphicsSceneHoverEvent is not sufficient

some environment would be needed for how your items are implemented

as an exemple, placing your Arrow item in a QGraphicsItemGroup could explain such a problem
if it is the case, have a look at QGraphicsItemGroup documentation § Detailed Description

__________________
Nicolas
08.05.2008 11:11 Nicolas SOUCHON is offline Send an Email to Nicolas SOUCHON Search for Posts by Nicolas SOUCHON Add Nicolas SOUCHON to your Buddy List
N1Rulez N1Rulez is a male
Coder


Registration Date: 09.04.2008
Posts: 16

Level: 8 [?]
Experience: 605
Next Level: 674

69 points of experience needed for next level

Thread Starter Thread Started by N1Rulez
Reply to this Post Post Reply with Quote Edit/Delete Posts Report Post to a Moderator       Go to the top of this page

Hmm... I dond't no what you mean, but I placed my arrow item directly into the QGraphicsScene as shown:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
                    if (startItems.count() > 0 && endItems.count() > 0 &&
                        startItems.first()->type() == GraphicsRectItem::Type &&
                        endItems.first()->type() == GraphicsRectItem::Type &&
                        startItems.first() != endItems.first()) {
                        //qDebug() << "in Arrow IF";
                        GraphicsRectItem *startItem =
                            qgraphicsitem_cast<GraphicsRectItem *>(startItems.first());
                        GraphicsRectItem *endItem =
                            qgraphicsitem_cast<GraphicsRectItem *>(endItems.first());
                        Arrow *arrow = new Arrow(startItem, endItem);
                        arrow->setColor(myLineColor);
                        startItem->addArrow(arrow);
                        endItem->addArrow(arrow);
                        arrow->setZValue(-1000.0);
                        addItem(arrow);                      // Add the arrow to the scene
                        arrow->updatePosition();
                    }


I have use the DiagramScene Example from QT and modified it a little

Regards
08.05.2008 11:59 N1Rulez is offline Send an Email to N1Rulez Search for Posts by N1Rulez Add N1Rulez to your Buddy List
Nicolas SOUCHON
Wizard


Registration Date: 27.06.2007
Posts: 735

Level: 29 [?]
Experience: 238,924
Next Level: 242,754

3,830 points of experience needed for next level

Reply to this Post Post Reply with Quote Edit/Delete Posts Report Post to a Moderator       Go to the top of this page

could you send complete compiling code
if it's derived from example and just a little modified
so there is no indiscretion to look at it

__________________
Nicolas

This post has been edited 1 time(s), it was last edited by Nicolas SOUCHON: 08.05.2008 12:38.

08.05.2008 12:37 Nicolas SOUCHON is offline Send an Email to Nicolas SOUCHON Search for Posts by Nicolas SOUCHON Add Nicolas SOUCHON to your Buddy List
N1Rulez N1Rulez is a male
Coder


Registration Date: 09.04.2008
Posts: 16

Level: 8 [?]
Experience: 605
Next Level: 674

69 points of experience needed for next level

Thread Starter Thread Started by N1Rulez
Reply to this Post Post Reply with Quote Edit/Delete Posts Report Post to a Moderator       Go to the top of this page

ok,

here are the arrow.h:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
#ifndef ARROW_H
#define ARROW_H

#include <QObject>
#include <QGraphicsLineItem>
#include "graphicsrectitem.h"

class QGraphicsLineItem;
class GraphicsRectItem;

class Arrow : public QObject, public QGraphicsLineItem {
    Q_OBJECT

public:
    enum { Type = UserType + 4 };

    Arrow(GraphicsRectItem *startItem, GraphicsRectItem *endItem,
          QGraphicsItem *parent = 0, QGraphicsScene *scene = 0);
    Arrow(QGraphicsItem *parent = 0, QGraphicsScene *scene = 0);
    void setObjects(GraphicsRectItem *startItem, GraphicsRectItem *endItem);
    int type() const { return Type; }
    QRectF boundingRect() const;
    QPainterPath shape() const;
    void setColor(const QColor &color) { myColor = color; }
    GraphicsRectItem *startItem() const { return myStartItem; }
    GraphicsRectItem *endItem() const { return myEndItem; }

public slots:
    void updatePosition();

protected:
    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
               QWidget *widget = 0);
    void hoverEnterEvent(QGraphicsSceneHoverEvent * event);
    void hoverLeaveEvent(QGraphicsSceneHoverEvent * event);

private:
    GraphicsRectItem *myStartItem;
    GraphicsRectItem *myEndItem;
    QColor myColor;
    QPolygonF arrowHead;

signals:
	void insertConnections(qint32 start_item_id, qint32 start_schema_id, qreal start_pos_x,
                           qreal start_pos_y, qreal start_pos_z, qint32 end_item_id,
                           qint32 end_schema_id, qreal end_pos_x, qreal end_pos_y,
                           qreal end_pos_z);
    void updateConnections(qint32 start_item_id, qint32 start_schema_id, qreal start_pos_x,
                           qreal start_pos_y, qreal start_pos_z, qint32 end_item_id,
                           qint32 end_schema_id, qreal end_pos_x, qreal end_pos_y,
                           qreal end_pos_z);
};

#endif


And the arrow.cpp:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
278:
279:
280:
281:
282:
283:
284:
285:
286:
287:
288:
289:
290:
291:
292:
293:
294:
295:
296:
297:
298:
299:
300:
301:
302:
303:
304:
305:
306:
307:
308:
309:
310:
311:
312:
313:
314:
315:
316:
317:
318:
319:
320:
321:
322:
323:
324:
325:
326:
327:
328:
329:
330:
331:
332:
333:
334:
335:
336:
337:
338:
339:
340:
#include <QtGui>

#include "arrow.h"
#include <math.h>

const qreal Pi = 3.14;

Arrow::Arrow(GraphicsRectItem *startItem, GraphicsRectItem *endItem,
         QGraphicsItem *parent, QGraphicsScene *scene)
    : QGraphicsLineItem(parent, scene) {
    myStartItem = startItem;
    myEndItem = endItem;
    setFlag(QGraphicsItem::ItemIsSelectable, true);
    myColor = Qt::black;
    setPen(QPen(myColor, 2, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
    setAcceptHoverEvents(true);

    // Insert Connection Location
    qint32 start_item_id = 0;
    qint32 start_schema_id = 0;
    qreal start_pos_x = 0;
    qreal start_pos_y = 0;
    qreal start_pos_z = 0;

    qint32 end_item_id = 0;
    qint32 end_schema_id = 0;
    qreal end_pos_x = 0;
    qreal end_pos_y = 0;
    qreal end_pos_z = 0;

    if(myEndItem->whichSide() == GraphicsRectItem::RightSide && myStartItem->whichSide() == GraphicsRectItem::LeftSide) {
        start_item_id = myEndItem->objectID();
        start_schema_id = 1;
        start_pos_x = myEndItem->rect().x() + myEndItem->rect().width() + myEndItem->parentItem()->pos().x();
        start_pos_y = myEndItem->rect().y() + (myEndItem->rect().height()/2) + myEndItem->parentItem()->pos().y();
        start_pos_z = myEndItem->zValue();

        end_item_id = myStartItem->objectID();
        end_schema_id = 1;
        end_pos_x = myStartItem->rect().x() + myStartItem->parentItem()->pos().x();
        end_pos_y = myStartItem->rect().y() + (myStartItem->rect().height()/2) + myStartItem->parentItem()->pos().y();
        end_pos_z = myStartItem->zValue();

        emit insertConnections(start_item_id,       // start_item_id
                               start_schema_id,     // start_schema_id
                               start_pos_x,         // start_pos_x
                               start_pos_y,         // start_pos_y
                               start_pos_z,         // start_pos_z
                               end_item_id,         // end_item_id
                               end_schema_id,       // end_schema_id
                               end_pos_x,           // end_pos_x
                               end_pos_y,           // end_pos_y
                               end_pos_z);          // end_pos_z
    }
    else {
        start_item_id = myStartItem->objectID();
        start_schema_id = 1;
        start_pos_x = myStartItem->rect().x() + myStartItem->rect().width() + myStartItem->parentItem()->pos().x();
        start_pos_y = myStartItem->rect().y() + (myStartItem->rect().height()/2) + myStartItem->parentItem()->pos().y();
        start_pos_z = myStartItem->zValue();

        end_item_id = myEndItem->objectID();
        end_schema_id = 1;
        end_pos_x = myEndItem->rect().x() + myEndItem->parentItem()->pos().x();
        end_pos_y = myEndItem->rect().y() + (myEndItem->rect().height()/2) + myEndItem->parentItem()->pos().y();
        end_pos_z = myEndItem->zValue();

        emit insertConnections(start_item_id,       // start_item_id
                               start_schema_id,     // start_schema_id
                               start_pos_x,         // start_pos_x
                               start_pos_y,         // start_pos_y
                               start_pos_z,         // start_pos_z
                               end_item_id,         // end_item_id
                               end_schema_id,       // end_schema_id
                               end_pos_x,           // end_pos_x
                               end_pos_y,           // end_pos_y
                               end_pos_z);          // end_pos_z
    }
}

Arrow::Arrow(QGraphicsItem *parent, QGraphicsScene *scene) : QGraphicsLineItem(parent, scene) {
    setFlag(QGraphicsItem::ItemIsSelectable, true);
    myColor = Qt::black;
    setPen(QPen(myColor, 2, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
    setAcceptHoverEvents(true);
}

void Arrow::setObjects(GraphicsRectItem *startItem, GraphicsRectItem *endItem) {
    myStartItem = startItem;
    myEndItem = endItem;

    // Insert Connection Location
    qint32 start_item_id = 0;
    qint32 start_schema_id = 0;
    qreal start_pos_x = 0;
    qreal start_pos_y = 0;
    qreal start_pos_z = 0;

    qint32 end_item_id = 0;
    qint32 end_schema_id = 0;
    qreal end_pos_x = 0;
    qreal end_pos_y = 0;
    qreal end_pos_z = 0;

    if(myEndItem->whichSide() == GraphicsRectItem::RightSide && myStartItem->whichSide() == GraphicsRectItem::LeftSide) {
        start_item_id = myEndItem->objectID();
        start_schema_id = 1;
        start_pos_x = myEndItem->rect().x() + myEndItem->rect().width() + myEndItem->parentItem()->pos().x();
        start_pos_y = myEndItem->rect().y() + (myEndItem->rect().height()/2) + myEndItem->parentItem()->pos().y();
        start_pos_z = myEndItem->zValue();

        end_item_id = myStartItem->objectID();
        end_schema_id = 1;
        end_pos_x = myStartItem->rect().x() + myStartItem->parentItem()->pos().x();
        end_pos_y = myStartItem->rect().y() + (myStartItem->rect().height()/2) + myStartItem->parentItem()->pos().y();
        end_pos_z = myStartItem->zValue();

        emit insertConnections(start_item_id,       // start_item_id
                               start_schema_id,     // start_schema_id
                               start_pos_x,         // start_pos_x
                               start_pos_y,         // start_pos_y
                               start_pos_z,         // start_pos_z
                               end_item_id,         // end_item_id
                               end_schema_id,       // end_schema_id
                               end_pos_x,           // end_pos_x
                               end_pos_y,           // end_pos_y
                               end_pos_z);          // end_pos_z
    }
    else {
        start_item_id = myStartItem->objectID();
        start_schema_id = 1;
        start_pos_x = myStartItem->rect().x() + myStartItem->rect().width() + myStartItem->parentItem()->pos().x();
        start_pos_y = myStartItem->rect().y() + (myStartItem->rect().height()/2) + myStartItem->parentItem()->pos().y();
        start_pos_z = myStartItem->zValue();

        end_item_id = myEndItem->objectID();
        end_schema_id = 1;
        end_pos_x = myEndItem->rect().x() + myEndItem->parentItem()->pos().x();
        end_pos_y = myEndItem->rect().y() + (myEndItem->rect().height()/2) + myEndItem->parentItem()->pos().y();
        end_pos_z = myEndItem->zValue();

        emit insertConnections(start_item_id,       // start_item_id
                               start_schema_id,     // start_schema_id
                               start_pos_x,         // start_pos_x
                               start_pos_y,         // start_pos_y
                               start_pos_z,         // start_pos_z
                               end_item_id,         // end_item_id
                               end_schema_id,       // end_schema_id
                               end_pos_x,           // end_pos_x
                               end_pos_y,           // end_pos_y
                               end_pos_z);          // end_pos_z
    }
}

QRectF Arrow::boundingRect() const {
    qreal extra = (pen().width() + 20) / 2.0;

    return QRectF(line().p1(), QSizeF(line().p2().x() - line().p1().x(),
                                      line().p2().y() - line().p1().y()))
        .normalized()
        .adjusted(-extra, -extra, extra, extra);
}

QPainterPath Arrow::shape() const {
    QPainterPath path = QGraphicsLineItem::shape();
    path.addPolygon(arrowHead);
    return path;
}

void Arrow::updatePosition() {
    QLineF line(mapFromItem(myStartItem, 0, 0), mapFromItem(myEndItem, 0, 0));
    setLine(line);

    // Update Connection Location
    qint32 start_item_id = 0;
    qint32 start_schema_id = 0;
    qreal start_pos_x = 0;
    qreal start_pos_y = 0;
    qreal start_pos_z = 0;

    qint32 end_item_id = 0;
    qint32 end_schema_id = 0;
    qreal end_pos_x = 0;
    qreal end_pos_y = 0;
    qreal end_pos_z = 0;

    if(myEndItem->whichSide() == GraphicsRectItem::RightSide && myStartItem->whichSide() == GraphicsRectItem::LeftSide) {
        start_item_id = myEndItem->objectID();
        start_schema_id = 1;
        start_pos_x = myEndItem->rect().x() + myEndItem->rect().width() + myEndItem->parentItem()->pos().x();
        start_pos_y = myEndItem->rect().y() + (myEndItem->rect().height()/2) + myEndItem->parentItem()->pos().y();
        start_pos_z = myEndItem->zValue();

        end_item_id = myStartItem->objectID();
        end_schema_id = 1;
        end_pos_x = myStartItem->rect().x() + myStartItem->parentItem()->pos().x();
        end_pos_y = myStartItem->rect().y() + (myStartItem->rect().height()/2) + myStartItem->parentItem()->pos().y();
        end_pos_z = myStartItem->zValue();

        emit updateConnections(start_item_id,       // start_item_id
                               start_schema_id,     // start_schema_id
                               start_pos_x,         // start_pos_x
                               start_pos_y,         // start_pos_y
                               start_pos_z,         // start_pos_z
                               end_item_id,         // end_item_id
                               end_schema_id,       // end_schema_id
                               end_pos_x,           // end_pos_x
                               end_pos_y,           // end_pos_y
                               end_pos_z);          // end_pos_z
    }
    else {
        start_item_id = myStartItem->objectID();
        start_schema_id = 1;
        start_pos_x = myStartItem->rect().x() + myStartItem->rect().width() + myStartItem->parentItem()->pos().x();
        start_pos_y = myStartItem->rect().y() + (myStartItem->rect().height()/2) + myStartItem->parentItem()->pos().y();
        start_pos_z = myStartItem->zValue();

        end_item_id = myEndItem->objectID();
        end_schema_id = 1;
        end_pos_x = myEndItem->rect().x() + myEndItem->parentItem()->pos().x();
        end_pos_y = myEndItem->rect().y() + (myEndItem->rect().height()/2) + myEndItem->parentItem()->pos().y();
        end_pos_z = myEndItem->zValue();

        emit updateConnections(start_item_id,       // start_item_id
                               start_schema_id,     // start_schema_id
                               start_pos_x,         // start_pos_x
                               start_pos_y,         // start_pos_y
                               start_pos_z,         // start_pos_z
                               end_item_id,         // end_item_id
                               end_schema_id,       // end_schema_id
                               end_pos_x,           // end_pos_x
                               end_pos_y,           // end_pos_y
                               end_pos_z);          // end_pos_z
    }
}

void Arrow::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *) {
    if (myStartItem->collidesWithItem(myEndItem)) {
        qDebug() << "!!!!!!!!!!!!!!!!(myStartItem->collidesWithItem(myEndItem))";
        return;
    }

     QPen myPen = pen();
     myPen.setColor(myColor);
     painter->setPen(myPen);
     painter->setBrush(myColor);

     QLineF centerLine(myStartItem->pos(), myEndItem->pos());
     QPolygonF endPolygon = QPolygonF(myEndItem->rect());//myEndItem->polygon();
     QPointF p1 = endPolygon.first() + myEndItem->pos();
     QPointF p2;
     QPointF intersectPoint;
     QLineF polyLine;
     for (int i = 0; i < endPolygon.count(); ++i) {
         p2 = endPolygon.at(i) + myEndItem->pos();
         polyLine = QLineF(p1, p2);
         QLineF::IntersectType intersectType = polyLine.intersect(centerLine, &intersectPoint);
         if (intersectType == QLineF::BoundedIntersection)
             break;
             p1 = p2;
     }

    if(myEndItem->whichSide() == GraphicsRectItem::RightSide && myStartItem->whichSide() == GraphicsRectItem::LeftSide) {
        setLine(QLineF(myEndItem->rect().x() + myEndItem->rect().width() + myEndItem->parentItem()->pos().x() + 10,
                   myEndItem->rect().y() + (myEndItem->rect().height()/2) + myEndItem->parentItem()->pos().y(),
                   myStartItem->rect().x() + myStartItem->parentItem()->pos().x() - 10,
                   myStartItem->rect().y() + (myStartItem->rect().height()/2) + myStartItem->parentItem()->pos().y()));

        QGraphicsLineItem *left_l = new QGraphicsLineItem(this);
        left_l->setPen(QPen(myColor, 2, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
        left_l->setLine(myStartItem->rect().x() + myStartItem->parentItem()->pos().x(),
                        myStartItem->rect().y() + (myStartItem->rect().height()/2) + myStartItem->parentItem()->pos().y(),
                        myStartItem->rect().x() + myStartItem->parentItem()->pos().x() - 10,
                        myStartItem->rect().y() + (myStartItem->rect().height()/2) + myStartItem->parentItem()->pos().y());
        left_l->setParentItem(this);


        QGraphicsLineItem *left_r = new QGraphicsLineItem(this);
        left_r->setPen(QPen(myColor, 2, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
        left_r->setLine(myEndItem->rect().x() + myEndItem->rect().width() + myEndItem->parentItem()->pos().x(),
                        myEndItem->rect().y() + (myEndItem->rect().height()/2) + myEndItem->parentItem()->pos().y(),
                        myEndItem->rect().x() + myEndItem->rect().width() + myEndItem->parentItem()->pos().x() + 10,
                        myEndItem->rect().y() + (myEndItem->rect().height()/2) + myEndItem->parentItem()->pos().y());
        left_r->setParentItem(this);
    }
    else {
        setLine(QLineF(myEndItem->rect().x() + myEndItem->parentItem()->pos().x() - 10,
                       myEndItem->rect().y() + (myEndItem->rect().height()/2) + myEndItem->parentItem()->pos().y(),
                       myStartItem->rect().x() + myStartItem->rect().width() + myStartItem->parentItem()->pos().x() + 10,
                       myStartItem->rect().y() + (myStartItem->rect().height()/2) + myStartItem->parentItem()->pos().y()));

        QGraphicsLineItem *left_l = new QGraphicsLineItem(this);
        left_l->setPen(QPen(myColor, 2, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
        left_l->setLine(myEndItem->rect().x() + myEndItem->parentItem()->pos().x(),
                        myEndItem->rect().y() + (myEndItem->rect().height()/2) + myEndItem->parentItem()->pos().y(),
                        myEndItem->rect().x() + myEndItem->parentItem()->pos().x() - 10,
                        myEndItem->rect().y() + (myEndItem->rect().height()/2) + myEndItem->parentItem()->pos().y());
        left_l->setParentItem(this);


        QGraphicsLineItem *left_r = new QGraphicsLineItem(this);
        left_r->setPen(QPen(myColor, 2, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
        left_r->setLine(myStartItem->rect().x() + myStartItem->rect().width() + myStartItem->parentItem()->pos().x(),
                        myStartItem->rect().y() + (myStartItem->rect().height()/2) + myStartItem->parentItem()->pos().y(),
                        myStartItem->rect().x() + myStartItem->rect().width() + myStartItem->parentItem()->pos().x() + 10,
                        myStartItem->rect().y() + (myStartItem->rect().height()/2) + myStartItem->parentItem()->pos().y());
        left_r->setParentItem(this);
    }

     double angle = ::acos(line().dx() / line().length());
     if (line().dy() >= 0)
         angle = (Pi * 2) - angle;

         painter->drawLine(line());
         if (isSelected()) {
             painter->setPen(QPen(myColor, 1, Qt::DashLine));
             QLineF myLine = line();
             myLine.translate(0, 4.0);
             painter->drawLine(myLine);
             myLine.translate(0,-8.0);
             painter->drawLine(myLine);
         }
    setAcceptHoverEvents(true);
}


void Arrow::hoverEnterEvent(QGraphicsSceneHoverEvent * event) {
    QGraphicsLineItem::hoverEnterEvent(event);
    qDebug() << "void Arrow::hoverEnterEvent(QGraphicsSceneHoverEvent * event)";
    this->setPen(QPen(QColor( 204, 0, 255, 76)));
    this->update();
}

void Arrow::hoverLeaveEvent(QGraphicsSceneHoverEvent * event) {
    qDebug() << "void Arrow::hoverLeaveEvent(QGraphicsSceneHoverEvent * event)";
    this->setPen(QPen(myColor));
    this->update();
}


Regards
N1Rulez

This post has been edited 1 time(s), it was last edited by N1Rulez: 09.05.2008 11:01.

09.05.2008 11:01 N1Rulez is offline Send an Email to N1Rulez Search for Posts by N1Rulez Add N1Rulez to your Buddy List
Nicolas SOUCHON
Wizard


Registration Date: 27.06.2007
Posts: 735

Level: 29 [?]
Experience: 238,924
Next Level: 242,754

3,830 points of experience needed for next level

Reply to this Post Post Reply with Quote Edit/Delete Posts Report Post to a Moderator       Go to the top of this page

I've added hover events to Arrow class in diagramscene example and it works

__________________
Nicolas
09.05.2008 19:03 Nicolas SOUCHON is offline Send an Email to Nicolas SOUCHON Search for Posts by Nicolas SOUCHON Add Nicolas SOUCHON to your Buddy List
Tree Structure | Board Structure
Jump to:
Post New Thread Post Reply
Qt Forum - programming with C++ and Qt » QtForum.org » Qt » Qt Programming » QGraphicsLineItem + setAcceptHoverEvents

views today: 4.786 | views yesterday: 12.104 | total views: 10.250.259


Klebekork Shop - Linux Shop - Kontaktanzeigen - Linux Forum -  SMS Gewinnspiel -  Hotels -  Stadtpläne -  Branchenbuch & Stadtplan

Branchenbuch Österreich - Branchenbuch Niederlande - Portugal Branchenverzeichnis - Spanien Branchenverzeichnis 
Telefonbuch - Branchenbuch Frankreich