У меня проблема с 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());
}
Поэтому, когда я запускаю свою программу, у меня естьэто окно, и я могу перетаскивать предметы.Кажется, все в порядке.
Но если я посмотрю поближе, зона перетаскивания будет больше, чем сам предмет.(см. синий прямоугольник на следующем снимке экрана) Синий прямоугольник означает, что если я переместлю мышь в этом прямоугольнике, курсор изменится, и я смогу перетащить элемент.
IТакое ощущение, что проблема связана со строкой «fitInView (scene () -> sceneRect ());».Если я уберу это, то это работает.Если я добавлю, например, «scale (5,1)», возникнет та же проблема.
У вас есть представление о том, в чем может быть проблема?