سؤال

أنا أستخدم إطار عمل رسومات QT لإنشاء مشهد وإرفاق طرق عرض متعددة بنفس المشهد ، حيث تقدم هذه المشاهدات مشهدًا ثلاثي الأبعاد OpenSceneGraph كخلفية ورسومات ثنائية الأبعاد هي نوع من التراكبات.

أحاول اعتراض الأحداث الرئيسية/الرئيسية في فئة OverlayViewPort الخاصة بي (ويرث QGraphicsView) والتنقل في المشهد ثلاثي الأبعاد وفقًا لذلك. فيما يلي عينة معالج الأحداث:

void OverlayViewport::mouseMoveEvent( QMouseEvent * event )
{
    QGraphicsView::mouseMoveEvent(event);
    if (event->isAccepted())
    {
        return;
    }

    3D_Scene_Stuff_Code();
}

لكن الأحداث مقبولة دائمًا ، وبالتالي فإن رمز الأشياء ثلاثي الأبعاد لا ينفذ أبدًا. إذا قمت بإزالة التحقق من isAccepted () ، فإن الكود الخاص بي ينفذ دائمًا.

ما أريد تحقيقه هو ، دع المشهد يقوم بأشياءه مثل الاختيار ، وسحب مقابل ، وإذا لم يفعل أي شيء (لا يقبل الحدث) ، فقم بإجراء أغراض ثلاثية الأبعاد.

إذا هذه هي اسئلتي:
1 - هل أنا على الطريق الخطأ هنا؟
2 - هل يجب أن أقوم بإعادة توجيه الأحداث إلى المشهد بأن المنظر متصل وفعل أشيائي إذا لم يتم قبول الحدث من قبل المشهد؟
3 - إن لم يكن 2 ، كيف يمكنني المتابعة؟

مع أطيب التحيات.

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

المحلول

لقد وجدت الجاني. يبدو أن هذا كان خطأ في كيو تي. لا يقوم QGraphicsView بتعيين العلم المقبول لـ MousemoveEvents بشكل مناسب. يحدث هذا بالنسبة لـ MousemoveEvents فقط ، والأحداث الأخرى جيدة. يقال إنه QT وانتظار ثابت.

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