当前位置:编程学习 > wap >>

QGraphicsScene中选择QGraphicsLineItem的问题

最近在学习QGraphicsScene和QGraphicsLineItem,在QGraphicsScene有个函数itemAt(QPoint p),可以根据坐标来获取该点是否有QGraphicsItem,目前的情况是:如果一个点包含QGraphicsItem,那就可以获取到这个item,如果换成QGraphicsLineItem,就无法获取到该item,QGraphicsLineItem是QGraphicsItem的子类,不知道是否有高手来给帮忙解决这个问题。 --------------------编程问答-------------------- 咋木有人回啊!自己顶一下! --------------------编程问答-------------------- 有两个可能
1.QGraphicsLineItem的Z没有放到最前
2.QGraphicsLineItem的线条细,没有达到选中条件 --------------------编程问答--------------------
引用 2 楼 davidsu33 的回复:
有两个可能
1.QGraphicsLineItem的Z没有放到最前
2.QGraphicsLineItem的线条细,没有达到选中条件


第一个可能不存在
第二个可能,我把线宽弄粗了,还是不行。。。不知道是否还有其他方法? --------------------编程问答-------------------- 我测试了一下没有问题,这样你把你的代码贴出来看看 --------------------编程问答--------------------
引用 4 楼 davidsu33 的回复:
我测试了一下没有问题,这样你把你的代码贴出来看看


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()正确返回了 --------------------编程问答--------------------
引用 6 楼 davidsu33 的回复:
这些代码还是不好帮你分析,我感觉可能的问题有如下两个
1.是否你的图形图元显示了
2.是否你的图形的boundingRect()正确返回了


谢谢你的回答,这个问题我解决了,通过跟踪发现,在设置图形时,没有给QGraphicsLineItem设置setline,导致没有实体,我使用了QGraphicsLineItem的selectItem函数来获取点击到的item,,谢谢你的帮助!
补充:移动开发 ,  Qt
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,