سحب المستطيل أكبر من العنصر نفسه باستخدام QGrahicsRectItem

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

سؤال

عندي مشكلة مع أ 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());
}

لذلك عندما أقوم بتشغيل برنامجي، تظهر لي هذه النافذة، حيث يمكنني سحب العناصر.يبدو كل شيء على ما يرام.

screen1

ولكن إذا نظرت عن كثب فإن منطقة السحب أكبر من العنصر نفسه.(انظر المستطيل الأزرق في لقطة الشاشة التالية) المستطيل الأزرق يعني أنه إذا قمت بتحريك الماوس في هذا المستطيل، يتغير المؤشر، ويمكنني سحب العنصر.

screen2

لدي شعور بأن المشكلة مرتبطة بـ "FitInview (Scene ()-> Sconerect ()) ؛" خط.إذا قمت بإزالته، فإنه يعمل.إذا أضفت "مقياس (5،1)" على سبيل المثال، فستكون هناك نفس المشكلة.

هل لديك فكرة عما يمكن أن تكون عليه المشكلة؟

هل كانت مفيدة؟

المحلول

أعتقد أنك أصابت هذا الخطأ: http://bugreports.qt-project.org/browse/QTBUG-17985

ما يحدث هو أن Qt تستخدم مشهدًا مستطيلًا بحجم 1x1 لاختبار ما إذا كانت العناصر موجودة أسفل المؤشر.في حالتك (وحالتي)، وحدة واحدة في المشهد أكبر من 1 بكسل على الشاشة.وبالتالي فإن المستطيل 1×1 يغطي أكثر من 1 بكسل من المؤشر، ويلامس العناصر غير الموجودة أسفل المؤشر.

لقد قدمت طلب إصلاح/دمج.يمكنك تعديل مصدر Qt الخاص بك لجعله يعمل الآن

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top