1

のに問題が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()->sceneRect());」に関連していると感じています。ライン。削除すれば動作します。たとえば、「scale(5,1)」を追加すると、同じ問題が発生します。

問題が何であるかについての考えがありますか?

4

1 に答える 1

0

私はあなたがこのバグにぶつかったと思います:http://bugreports.qt-project.org/browse/QTBUG-17985

Qtは、サイズが1x1のシーン長方形を使用して、アイテムがカーソルの下にあるかどうかをテストします。あなたの(そして私の)場合、シーンの1ユニットは画面の1ピクセルよりも大きいです。したがって、1x1の長方形は、カーソルから1ピクセル以上をカバーし、カーソルの下にないアイテムに接触します。

修正/マージリクエストを送信しました。Qtソースを変更して、今のところ機能させることができます。

于 2011-04-01T18:33:40.127 に答える