Pregunta

tengo un problema con un QGrahicsRectItem en un QGraphicsScene.Lo que me gustaría es poder mover el elemento con el mouse.Pero el problema es que en mi caso, el rectángulo que arrastra es más grande que el elemento en sí.

Aquí está el código que uso:

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());
}

Entonces, cuando ejecuto mi programa tengo esta ventana y puedo arrastrar elementos.Todo parece estar bien.

screen1

Pero si miro más de cerca, la zona de arrastre es más grande que el elemento en sí.(vea el rectángulo azul en la siguiente captura de pantalla) El rectángulo azul significa que si muevo el mouse en este rectángulo, el cursor cambia y puedo arrastrar el elemento.

screen2

Tengo la sensación de que el problema está relacionado con el "fitinview (escena ()-> escense ());" línea.Si lo elimino, entonces funciona.Si agrego una 'escala (5,1)', por ejemplo, surge el mismo problema.

¿Tienes una idea de cuál podría ser el problema?

¿Fue útil?

Solución

Creo que encontraste este error: http://bugreports.qt-project.org/browse/QTBUG-17985

Lo que sucede es que Qt usa un rectángulo de escena de 1x1 de tamaño para probar si los elementos están debajo del cursor.En su caso (y el mío), 1 unidad en la escena es mayor que 1 píxel en la pantalla.Entonces, el rectángulo de 1x1 cubre más de 1 píxel desde el cursor y toca elementos que no están debajo del cursor.

He enviado una solicitud de reparación/fusión.Puede modificar su fuente Qt para que funcione por ahora.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top