Saya punya masalah dengan QGrahicsRectItem
di QGraphicsScene
. Yang saya inginkan adalah bisa memindahkan item dengan mouse. Tapi masalahnya adalah dalam kasus saya, persegi panjang yang diseret lebih besar dari item itu sendiri.
Berikut kode yang saya gunakan:
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());
}
Jadi ketika saya menjalankan program saya, saya mempunyai jendela ini, dan saya dapat menyeret item. Semuanya tampak baik-baik saja.
Tetapi jika saya melihat lebih dekat zona seretnya lebih besar dari item itu sendiri. (lihat persegi panjang biru pada tangkapan layar berikut) Persegi panjang biru berarti Jika saya menggerakkan mouse di dalam persegi panjang ini, kursor akan berubah, dan saya dapat menyeret item tersebut.
Saya merasa masalahnya terkait dengan “fitInView(scene()->sceneRect());” garis. Jika saya menghapusnya, maka itu berhasil. Jika saya menambahkan 'skala(5,1)' misalnya, ada masalah yang sama.
Apakah Anda tahu apa masalahnya?