سحب المستطيل أكبر من العنصر نفسه باستخدام QGrahicsRectItem
-
12-11-2019 - |
سؤال
عندي مشكلة مع أ 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());
}
لذلك عندما أقوم بتشغيل برنامجي، تظهر لي هذه النافذة، حيث يمكنني سحب العناصر.يبدو كل شيء على ما يرام.
ولكن إذا نظرت عن كثب فإن منطقة السحب أكبر من العنصر نفسه.(انظر المستطيل الأزرق في لقطة الشاشة التالية) المستطيل الأزرق يعني أنه إذا قمت بتحريك الماوس في هذا المستطيل، يتغير المؤشر، ويمكنني سحب العنصر.
لدي شعور بأن المشكلة مرتبطة بـ "FitInview (Scene ()-> Sconerect ()) ؛" خط.إذا قمت بإزالته، فإنه يعمل.إذا أضفت "مقياس (5،1)" على سبيل المثال، فستكون هناك نفس المشكلة.
هل لديك فكرة عما يمكن أن تكون عليه المشكلة؟
المحلول
أعتقد أنك أصابت هذا الخطأ: http://bugreports.qt-project.org/browse/QTBUG-17985
ما يحدث هو أن Qt تستخدم مشهدًا مستطيلًا بحجم 1x1 لاختبار ما إذا كانت العناصر موجودة أسفل المؤشر.في حالتك (وحالتي)، وحدة واحدة في المشهد أكبر من 1 بكسل على الشاشة.وبالتالي فإن المستطيل 1×1 يغطي أكثر من 1 بكسل من المؤشر، ويلامس العناصر غير الموجودة أسفل المؤشر.
لقد قدمت طلب إصلاح/دمج.يمكنك تعديل مصدر Qt الخاص بك لجعله يعمل الآن