سؤال

أنا جديدة إلى واجهة المستخدم الرسومية QT البرمجة و أنا باستخدام QT Creator.المشكلة اراه مع الضغط و خط تحرير عندما يضغط المستخدم على مفتاح enter.البرنامج يفتح مربع المجموعة و يسمح للمستخدم بإدخال كلمة المرور و اضغط على موافق أو إلغاء الأمر.

إذا كان المستخدم بالضغط على المفتاح enter عندما يكون خط تحرير التركيز ، ويبدو أن البرنامج تنبعث منها إشارة ثانية على QAbstractButton animateClick(); حتى عندما تكون المجموعة التالية فتح مربع و يطالب المستخدم اضغط موافق أو إلغاء يستمر البرنامج كما لو كان المستخدم الضغط على زر موافق.

أقوم بإعداد دفع أزرار تسمح للمستخدم اضغط على المفتاح tab واضغط على مفتاح enter.من أجل الحصول على هذه الوظيفة أنا وضعت okbutton->setAutodefault(true); و cancelButton->setAutodefault(true);

ولدي أيضا lineEdit على المستخدم إدخال كلمة المرور ثم اضغط enter.أنا وضعت هذا الأمر من خلال ربط عودة ضغط إشارة إلى الزر "موافق" أدناه.

connect(lineEdit, SIGNAL(returnPressed()), okButton, SIGNAL(clicked()));

كما أنني حاولت الاتصال العودة الضغط على إشارة مباشرة إلى فتحة ولكن المشكلة لا تزال موجودة.

connect(lineEdit, SIGNAL(returnPressed()), this, SLOT(chkPassword()));

إذا كان المستخدم بالنقر فوق okButton مع الماوس أو مجموعة okButton->setAutoDefault(false); وظائف البرنامج كما يجب.أود أن أعرف إذا كان من الممكن تعطيل animateClick إشارة إلى أن يحدث عند خط تحرير التركيز.

أي مساعدة مع هذا سيكون موضع تقدير كبير.

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

المحلول

حاول أبدا ربط lineEdit مع okButton, أيتعليق خارج هذا الخط من التعليمات البرمجية:

connect(lineEdit, SIGNAL(returnPressed()), okButton, SIGNAL(clicked()));

والتحقق إذا كان البرنامج تتصرف كما تريد.


أيضا, قد ترغب في الاتصال

okButton->setDefault(true);

بالإضافة إلى setAutoDefault() ويدعو كل من الأزرار ، اعتمادا على ما تريده بالضبط يحدث عندما يضغط المستخدم أدخل مع أشياء مختلفة في التركيز.انظر هذا الجواب لمزيد من المعلومات حول هذا الموضوع.


أعتقد بما أنك لم تذكر أنك لا ندعو setDefault() أي من الأزرار الخاصة بك.وهكذا ، okButton أول زر مع autoDefault تعيين خاصية true.وهذا يعني أن okButton يصبح الحوار هو "زر الاختيار" كلما الحوار إلى التعامل مع أدخل بضغطة هذا لم يحدث على بعض autoDefault زر (مثل cancelButton في هذه الحالة).

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

QLineEdit لا يتم استخدام متعدد الخطوط التحرير, لذلك ربما لا تستهلك اضغط على مفتاح الحدث أدخل (في حين لا يزال التعامل مع ذلك ، في أن يرسل الرافضة على returnPressed() إشارة).وهكذا الاتصال من returnPressed() ينتهي فعل ما فعل ، أديتيونالي, الافتراضي-زر المنطق ينتهي النقر فوق الزر الخاص بك مرة ثانية.

تحقق أيضا هذا الموضوع على Qt المشروع المنتديات والتي يبدو أن حل نفس المشكلة بطريقة مختلفة.

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