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

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

  •  06-09-2019
  •  | 
  •  

سؤال

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

أي أفكار حول هذا، بصرف النظر عن بدء Qtimer TTO تحقق باستمرار من الموقف، سيكون موضع تقدير كبير.

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

المحلول

أعتقد أنه من الأفضل تثبيت مرشح الأحداث في نافذة المستوى الأعلى، بدلا من التطبيق. ومع ذلك، إذا كنت لا تزال لا تحصل QMoveEventS وأنت تعمل على Windows، ربما يمكنك تجاوز winEventFilter() وانتظر WM_MOVE. وبعد قد تكون وظيفة مماثلة متاحة لنظام Linux و Mac.

عادة لا أوصي بتكسر استقلال المنصة، لكن في بعض الأحيان قد يكون منطقيا.

نصائح أخرى

الفئة الفعلية هي حقا أفضل حل: - /

في الفصل الذي ينفذ Windows المستوى الأعلى الذي تفرط بهذه الوظيفة فقط:

virtual void moveEvent ( QMoveEvent * event )

من الوثائق:

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

يمكن الوصول إلى الوضع القديم من خلال QmoveEvent :: Oldpos ().

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

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