QGraphicsScene中选择QGraphicsLineItem的问题
最近在学习QGraphicsScene和QGraphicsLineItem,在QGraphicsScene有个函数itemAt(QPoint p),可以根据坐标来获取该点是否有QGraphicsItem,目前的情况是:如果一个点包含QGraphicsItem,那就可以获取到这个item,如果换成QGraphicsLineItem,就无法获取到该item,QGraphicsLineItem是QGraphicsItem的子类,不知道是否有高手来给帮忙解决这个问题。 --------------------编程问答-------------------- 咋木有人回啊!自己顶一下! --------------------编程问答-------------------- 有两个可能1.QGraphicsLineItem的Z没有放到最前
2.QGraphicsLineItem的线条细,没有达到选中条件 --------------------编程问答--------------------
第一个可能不存在
第二个可能,我把线宽弄粗了,还是不行。。。不知道是否还有其他方法? --------------------编程问答-------------------- 我测试了一下没有问题,这样你把你的代码贴出来看看 --------------------编程问答--------------------
QGraphicsItem *item = itemAt(pt);
if (isOSConnecting()) {
m_line->setVisible(true);
}
if (item != 0)
{
m_curItem = (GraphElementItem *)item;
showItemHotSpots(m_curItem, true);
}
else
{
showItemHotSpots(m_curItem, false);
m_curItem = 0;
}
这一部分就是获取item的代码,是在mouseMoveEvent中的,
我自己自定义了一个类:ConnectorItem,它继承了QGraphicsLineItem,就是获取不到这个item。下面这个类定义,不知道哪地方出问题了。。
lass QPainter;
class QGraphicsLineItem;
class ConnectorItem : public QGraphicsLineItem
{
public:
enum { Type = UserType + 2 };
ConnectorItem(GraphElementItem *outGE, GraphElementItem *inGE, QGraphicsItem *parent = 0, ProgramScene *scene = 0);
virtual ~ConnectorItem();
int type() const { return Type; }
QRectF boundingRect() const;
QPainterPath shape() const;
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
enum {
LineOut_Length = 20, // pixel
LineIn_Length = 20,
GE_Gap = 10,
};
private:
void drawRightOutLine(QPainter *, QPointF, QPointF, QPointF, QPointF);
void drawBottomOutLine(QPainter *, QPointF, QPointF, QPointF, QPointF);
void drawLeftInLine(QPainter *, QPointF, QPointF, QPointF, QPointF);
void drawTopInLine(QPainter *, QPointF, QPointF, QPointF, QPointF);
void RightToTop(QPainter *, QPointF, QPointF, QPointF, QPointF);
void RightToLeft(QPainter *, QPointF, QPointF, QPointF, QPointF);
void BottomToTop(QPainter *, QPointF, QPointF, QPointF, QPointF);
void BottomToLeft(QPainter *, QPointF, QPointF, QPointF, QPointF);
void drawLines(QPainter *);
QLineF m_lineOut;
QLineF m_lineOutPro;
QLineF m_lineConnect;
QLineF m_lineInPro;
QLineF m_lineIn;
QLineF m_lineArrow1;
QLineF m_lineArrow2;
QVector<QPointF> m_pts;
QColor m_color;
GraphElementItem::HotSpot m_hotSpotOut;
GraphElementItem::HotSpot m_hotSpotIn;
ProgramScene *m_scene;
GraphElementItem *m_outGE;
GraphElementItem *m_inGE;
}; --------------------编程问答-------------------- 这些代码还是不好帮你分析,我感觉可能的问题有如下两个
1.是否你的图形图元显示了
2.是否你的图形的boundingRect()正确返回了 --------------------编程问答--------------------
谢谢你的回答,这个问题我解决了,通过跟踪发现,在设置图形时,没有给QGraphicsLineItem设置setline,导致没有实体,我使用了QGraphicsLineItem的selectItem函数来获取点击到的item,,谢谢你的帮助!
补充:移动开发 , Qt