Перетаскивая прямоугольник больше, чем сам товар с использованием QGrahicsRectItem
-
12-11-2019 - |
Вопрос
У меня есть проблема с генеракодицетагкодом в генеракодицетагкоде. То, что я хотел бы, чтобы иметь возможность переместить предмет мышью. Но проблема в том, что в моем случае прямоугольник перетаскивания больше всего элемента.
Вот код, который я использую:
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());
}
.
Так когда я запускаю свою программу у меня есть это окно, и я могу перетащить предметы. Все кажется хорошо.
Но если я смотрю ближе, зона перетаскивания больше всего предмета. (См. Синий прямоугольник на следующем скриншоте) Синий прямоугольник означает, что если я перемещаю мышь в этот прямоугольник, курсор меняется, и я могу перетащить элемент.
У меня есть ощущение, что проблема связана с «FitinView (сцена () -> Сценарным ());» линия. Если я удалю его, то это работает. Если я добавлю «масштаб (5,1)», например, та же проблема.
У вас есть идея о том, что может быть проблема?
Решение
Я думаю, что вы ударили эту ошибку: http://bugreports.qt-project.org/ loowse / qtbug-17985
Что произойдет, это Qt использует прямоугольник сцены, который имеет размер 1x1, чтобы проверить, если элементы находятся под курсором.В вашем (и моего) корпусе 1 блок на сцене больше 1 пикселей на экране.Таким образом, прямоугольник 1x1 покрывает более 1 пикселей от курсора, а касается элементов, которые не под курсором.
Я отправил запрос исправления / слияния.Вы можете изменить свой источник QT, чтобы сделать его работать на данный момент. AVE