سؤال

لديّ مصفوفة من QGraphicsItem's في QGraphicsScene وعندما أنقر على عنصر يغير لونه. يتم تنفيذ هذا مع mousePressEvent(). أريد أن أكون قادرًا على النقر والاحتفاظ ثم تحريك المؤشر عبر QGraphicsItem الأخرى وتغيير لونها أيضًا ، وبالتالي تفعيلهم mousePressEvent().

المشكلة هي أنه نظرًا للاستيلاء على الماوس للعنصر الأول ، نقر "الاحتفاظ" بجميع الأحداث و hoverEnterEvent() لا يتم تشغيله. حاولت إضافة ungrabMouse() ل mousePressEvent() لكن هذا لم يساعد.

أعتقد أن أحد الحلول سيكون لجعل السحب القابل للتسرب من QGraphicSitem واستخدام وظائف السحب والإسقاط QT لذلك. في الواقع لدي هذا:

void dragEnterEvent(QGraphicsSceneDragDropEvent *event)
{
    changeColor();
}

وعندما أسحب بعض النص من التطبيق على العناصر ، فإنه يعمل كما أريد ولكن ليس عندما "أسحب" QGrahphicSitem.

فهل الحل الوحيد لجعل QGraphicsItem قابل للسحب ليكون قادرًا على تشغيل الأحداث أثناء التحويل فوقها باستخدام زر الماوس النقر؟

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

المحلول 2

لقد وجدت حلاً بنفسي. أضفت جميع QGraphicsRectItem's إلى QGraphicsItemGroup ونفذت الأحداث لهذه المجموعة. في المجموعة :: MousemoveEvent () أتحقق من موقف المؤشر وتطبيق الحدث على أطفاله. تبدو هكذا:

void Group::mouseMoveEvent ( QGraphicsSceneMouseEvent * event )
{
    if (boundingRect().adjusted(0,0,-1,-1).contains(event->pos()))
    {
        if (CellCoordinate(event->pos()) != lastChangedCell_) {
            lastChangedCell_ = CellCoordinate(event->pos());
            modifyCell(CellCoordinate(event->pos()));
        }
    }
}

إذا كان لديك نفس المشكلة وتحتاج إلى مزيد من المعلومات ، فلا تتردد في الاتصال بي.

نصائح أخرى

أوصي باستخدام mouseMoveEvent().

تحرير: mouseMoveEvent() من الوالد QGraphicsView.

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