使用QGrahicsRectItem拖动大于项目本身的矩形

时间:2011-03-28 09:12:57

标签: qt draggable qgraphicsview qgraphicsitem

我在QGrahicsRectItem中遇到QGraphicsScene的问题。我想要的是能够用鼠标移动项目。但问题是,在我的情况下,拖动矩形比项目本身大。

以下是我使用的代码:

class Test: public QGraphicsView
{
    public:
    Test();

    private:
    virtual void resizeEvent (QResizeEvent * event);
    QGraphicsScene* m_pScene;
};

Test::Test()
{
    m_pScene = new QGraphicsScene();
    setScene(m_pScene);

    m_pScene->setSceneRect(0, 0, 100, 100);

    for (int i = 0 ; i < 10 ; i++)
    {
        QGraphicsRectItem * pItem = new QGraphicsRectItem();
        pItem->setFlag(QGraphicsItem::ItemIsMovable);
        pItem->setBrush(QBrush(QColor(190, 100, 100)));
        pItem->setRect(QRectF(10*i, 10, 5, 80.f));
        pItem->setCursor(Qt::SizeAllCursor);
        m_pScene->addItem(pItem);
    }


    setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);

    resize(600, 200);
    fitInView(scene()->sceneRect());
    show();
}

void Test::resizeEvent(QResizeEvent * event)
{
    QGraphicsView::resizeEvent(event);
    fitInView(scene()->sceneRect());
}

因此,当我运行程序时,我有这个窗口,我可以拖动项目。一切似乎都没问题。

screen1

但如果我仔细观察,拖动区域比项目本身更大。 (参见下面屏幕截图中的蓝色矩形)蓝色矩形表示如果我在此矩形中移动鼠标,光标会改变,我可以拖动该项目。

screen2

我觉得这个问题与“fitInView(scene() - &gt; sceneRect());”行有关。如果我删除它,那么它的工作原理。 例如,如果我添加'scale(5,1)',就会出现同样的问题。

你知道问题可能是什么吗?

1 个答案:

答案 0 :(得分:0)

我认为你遇到了这个错误:http://bugreports.qt-project.org/browse/QTBUG-17985

Qt使用大小为1x1的场景矩形来测试项目是否在光标下。在您(和我的)情况下,场景中的1个单位大于屏幕上的1个像素。因此,1x1矩形覆盖光标的1个以上像素,并触摸不在光标下的项目。

我已提交修复/合并请求。您可以修改您的Qt源以使其适用于now.have

相关问题