Arrastrando un rectángulo más grande que el propio elemento usando QGrahicsRectItem
-
12-11-2019 - |
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.
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.
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?
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.