الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف أعرف وقت الidle للنظام في الqt

بدأه azzoz2 في 30 يونيو 2009 · 6 رد · 1,325 مشاهدة · في قسم Cross Platform GUI Libraries العام
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته ...

السؤال هنا كيف أعرف الوقت اللي يكون فيه النظام بوضع idle ...

حاولت إني أستعمل QTimer .... بحيث أعمل له تصفير (reset)في ثلاث حالات :

1) الضغط على لوحة المفاتيح : واستخدمت void keyPressEvent ( QKeyEvent * event )

2) تحريك الماوس : واستخدمت void mouseMoveEvent ( QMouseEvent * event )

لكن ما اشتغلت معي بحيث إنها تعمل مع كل تحريك للماوس ...

كتبت حل يؤدي الغرض ... واستعملت QCursor::pos().x() , QCursor::pos().y()

بحيث استعملت Timer كل ثانية وإذا حصل إن الـx و الـy للماوس تغيرت يعمل reset

3) الضغط بالماوس : واستعملت void keyPressEvent ( QKeyEvent * event )

لكن المشكلة هنا إنها ما تستقبل إلا الضغط بالماوس على نفس نافذة البرنامج ... لكن أنا أريد استقبال أي ضغطة للماوس ؟؟

فلم أتوصل لحل ...

أنتظر آرائكم وحلولكم للمشكلة ...

#2

جاتني فكرة يابرقاوي

تسوي grap للماوس عند الضغط في أي مكان في النافذة تحدد global pos ثم توقف ال grap

تم عن طريق الفئة QCoreApplicatio أو عن طريق الفئة QTestEventList ترسل الحدث الى الموقع حتى نحافظ على طلب المستخدم

جرب وقلي وش صار معاك يا........... برقاوي :rolleyes:

تم تعديل هذه المشاركة بواسطة مصفوفة في 30 يونيو 2009 في 09:27

بسم الله الرحمن الرحيم

مدونة دوال

كيوتي العربي

#3

لو ممكن ازاى نعرف idle لبرنامج بالتحديد

بســم الله الـرحمــن الرحيــم

[يمين]مرة سألتنى نفسى هل نستطيع هزيمة اسرائيل والبلاد المعادية للاسلام؟

فاجبت هذا ممكن ولكن علينا اولا ان نتمسك بعقديتنا

وثانيا اذا كان معدل ما نكتبه وما يتم تطبيقه من اوراق بحثية يبلغ ضعف الدولة المراد هزيمتها

ثالثا اذا كنا امة عربية واحدة

[وسط]مواطن مسلم من الجمهورية العربية المتحدة

[/يمين] [/وسط]

#4

أهلا بالأخ مصفوفة .... ما شاء الله عليك نلقاك بكل مكان ....

كشفتنا قدام الناس الله يهديك :lol: :lol: ....

بالنسبة لحلك أنا ذكرت هذا الحل في النقطة الثانية ...

لكن أنا أبغى حل للنقطة الثالثة .... وجزاك الله خير ...

#5

1-حسب فهمي لطلبك الثاني والثالث فإن فكرتي تؤدي لطلبك الثالث

ألآن أتتني فكرة أجمل مع التطبيق

2-مارأيك انك تجعل ال focus على النافذة في حال كان هناك focusOut وتعرفها عن طريق دالة الحدث

void focusOutEvent ( QFocusEvent * event )

اذا هذا دليل أن المستخدم نقر على مكان ما خارج النافذة

ثم تقوم أنت بإرجاع ال focus الى نافذتك عن طريق الدالة setFocus .

وقد تكون هناك حلول أخرى أفضل

هذا وألله أعلم

بسم الله الرحمن الرحيم

مدونة دوال

كيوتي العربي

#6

والله يا أخي مصفوفة ما نفعت معي ....

ممكن تجرب وتضع تجربتك هنا ...

لكن المشكلة في برنامجي إنه يكون مخفي يعني يشتغل في الـBackground ....

Be aware that if the widget is hidden, it will not accept focus until it is shown.

#7
اقتباس
لكن المشكلة هنا إنها ما تستقبل إلا الضغط بالماوس على نفس نافذة البرنامج ... لكن أنا أريد استقبال أي ضغطة للماوس ؟؟

لا أعتقد انه يمكن التعامل مع هذا الحدث من Qt!

فقط الاحداث على البرنامج هي التي يمكنك معالجتها.

من الـ docs

اقتباس
Mouse events occur when a mouse button is pressed or released inside a widget

لذا عليك ان تراجع قسم ويندوز API لمعرفة نوع هذا الحدث ومن ثم كيفية التعامل معه من داخل كيوت.

والقي نظرة حول هذه الدالة:

اقتباس
bool QCoreApplication::winEventFilter ( MSG * msg, long * result ) [virtual]

The message procedure calls this function for every message received. Reimplement this function if you want to process window messages msg that are not processed by Qt. If you don't want the event to be processed by Qt, then return true and set result to the value that the window procedure should return. Otherwise return false.

It is only directly addressed messages that are filtered. To handle system wide messages, such as messages from a registered hot key, you need to install an event filter on the event dispatcher, which is returned from QAbstractEventDispatcher::instance().

بالتوفيق.

تم تعديل هذه المشاركة بواسطة SudaNix في 2 يوليو 2009 في 21:54

مواضيع مشابهة