Перетаскивая прямоугольник больше, чем сам товар с использованием QGrahicsRectItem

StackOverflow https://stackoverflow.com/questions/5456850

Вопрос

У меня есть проблема с генеракодицетагкодом в генеракодицетагкоде. То, что я хотел бы, чтобы иметь возможность переместить предмет мышью. Но проблема в том, что в моем случае прямоугольник перетаскивания больше всего элемента.

Вот код, который я использую:

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 (сцена () -> Сценарным ());» линия. Если я удалю его, то это работает. Если я добавлю «масштаб (5,1)», например, та же проблема.

У вас есть идея о том, что может быть проблема?

Это было полезно?

Решение

Я думаю, что вы ударили эту ошибку: http://bugreports.qt-project.org/ loowse / qtbug-17985

Что произойдет, это Qt использует прямоугольник сцены, который имеет размер 1x1, чтобы проверить, если элементы находятся под курсором.В вашем (и моего) корпусе 1 блок на сцене больше 1 пикселей на экране.Таким образом, прямоугольник 1x1 покрывает более 1 пикселей от курсора, а касается элементов, которые не под курсором.

Я отправил запрос исправления / слияния.Вы можете изменить свой источник QT, чтобы сделать его работать на данный момент. AVE

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top