هل هناك طريقة لتحديد ما إذا كان قد تم نقل نافذة QT المستوى الأعلى؟
-
06-09-2019 - |
سؤال
أحاول تحديد متى تم نقل النافذة الرئيسية للتطبيق الخاص بي. النافذة الرئيسية هي QMAINWindow القياسية وقمنا بتثبيت EventFilter على Qapplication للبحث عن MoveVents ل QmainWindow، ولكن لا شيء يتم تشغيله. بالنسبة إلى مجموعة متنوعة من الأسباب، فإن الفئة الفئة الفرعية QMAINWindow ليست خيارا حقا.
أي أفكار حول هذا، بصرف النظر عن بدء Qtimer TTO تحقق باستمرار من الموقف، سيكون موضع تقدير كبير.
المحلول
أعتقد أنه من الأفضل تثبيت مرشح الأحداث في نافذة المستوى الأعلى، بدلا من التطبيق. ومع ذلك، إذا كنت لا تزال لا تحصل QMoveEvent
S وأنت تعمل على Windows، ربما يمكنك تجاوز winEventFilter()
وانتظر WM_MOVE
. وبعد قد تكون وظيفة مماثلة متاحة لنظام Linux و Mac.
عادة لا أوصي بتكسر استقلال المنصة، لكن في بعض الأحيان قد يكون منطقيا.
نصائح أخرى
الفئة الفعلية هي حقا أفضل حل: - /
في الفصل الذي ينفذ Windows المستوى الأعلى الذي تفرط بهذه الوظيفة فقط:
virtual void moveEvent ( QMoveEvent * event )
من الوثائق:
يمكن إعادة تكوين معالج الأحداث هذا في فئة فرعية لتلقي أحداث نقل القطعة التي يتم تمريرها في معلمة الأحداث. عندما تتلقى القطعة هذا الحدث، فهو بالفعل في الموقف الجديد.
يمكن الوصول إلى الوضع القديم من خلال QmoveEvent :: Oldpos ().
يجب أن يسمح لك هذا بالكشف عن نقل نافذتك الرئيسية. لماذا لا تستطيع الفئة الفرعية؟ هل تستخدم مثيل QMainWindow
مباشرة؟ حالة الاستخدام المعتادة هي الفئة الفرعية لها على أي حال.