كيفية تنفيذ أداة السحب والإفلات في حاوية أخرى في كيو تي؟[مغلق]

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

  •  20-12-2019
  •  | 
  •  

سؤال

لدي نافذة بها عدة حاويات.ما هي أبسط طريقة لتنفيذ السحب والإسقاط بينهما؟

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

المحلول

عليك استخدام أ QDrag* هدف.ثم أعد التنفيذ:

virtual void mousePressEvent(QMouseEvent * event);
virtual void mouseReleaseEvent(QMouseEvent * event);
virtual void mouseMoveEvent(QMouseEvent *event);

داخل هذه الأحداث، ستدير نقطة البداية (حيث يبدأ السحب) ونقطة النهاية (حيث تقوم بإسقاط الأداة).ستستخدم أيضًا بروتوكول MIME للسماح لإطار العمل بإدارة عملية السحب والإفلات.

المقالة الأكثر فائدة حول السحب والإفلات هي: ن قطرة السحب

نصائح أخرى

أعتقد أن أسهل طريقة هي الإنشاء eventFilter فئة، حيث يمكنك تصفية أحداث السحب والإفلات و ثَبَّتَ هو - هي (someWidget->installEventFilter) لجميع عناصر واجهة المستخدم الخاصة بك، حيث تريد السحب والإفلات.مثال من المستندات - هنا

تحديث:

الشيء مع Eventfilter هو أنك لا تحتاج إلى تصنيف جميع عناصر واجهة المستخدم الخاصة بك إلى فئات فرعية حتى تتمكن من السحب والإسقاط.ما عليك سوى تثبيت الفلتر على أي عنصر واجهة مستخدم ترغب في الحصول على فلتر dnd فيه، وسيحصل عليه.

أما بالنسبة للتصفية نفسها، فهي لا تمنع دائمًا الأحداث وما إلى ذلك (سوف تفعل ذلك إذا كانت هذه هي نيتك).لقد كان مجرد مثال لكيفية استخدامه.

مجرد واحد من عدد لا يحصى من الخيارات مع السحب والإفلات:في dropEvent، وdragMoveEvent، وdragEnterEvent، من المحتمل أن يتذكر الفلتر الخاص بك المؤشر إلى ما تريد إسقاطه وفي DropEvent يصدر إشارة مع الكائن، ويحمل هذا الحدث المؤشر ويلتقطه باستخدام عنصر واجهة المستخدم حيث تقوم بإسقاطه، وهذا كل شيء، أي عنصر واجهة مستخدم يحتوي على سيكون للمرشح المثبت خاصية السحب والإسقاط.

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

لقد افترضت أنك تعرف كيفية السحب والإفلات، لكنني اعتقدت أن تجاوز الأحداث في جميع عناصر واجهة المستخدم التي تحتوي على نفس الكود مرارًا وتكرارًا قد لا يكون صحيحًا.لذلك أوضحت لك كيف يمكن القيام بذلك بسهولة باستخدام مرشح أحداث واحد لجميع الأدوات التي تريد سحبها وإسقاطها.

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