سؤال

وأواجه سؤال كيو تي. أريد القطعة QLineEdit أن يكون التركيز عند بدء تشغيل التطبيق. خذ البرمجية التالية على سبيل المثال:

#include <QtGui/QApplication>
#include <QtGui/QHBoxLayout>
#include <QtGui/QPushButton>
#include <QtGui/QLineEdit>
#include <QtGui/QFont>


 int main(int argc, char *argv[])
 {
     QApplication app(argc, argv);

     QWidget *window = new QWidget();
     window->setWindowIcon(QIcon("qtest16.ico"));
     window->setWindowTitle("QtTest");

     QHBoxLayout *layout = new QHBoxLayout(window);

     // Add some widgets.
     QLineEdit *line = new QLineEdit();

     QPushButton *hello = new QPushButton(window);
     hello->setText("Select all");
     hello->resize(150, 25);
     hello->setFont(QFont("Droid Sans Mono", 12, QFont::Normal));

     // Add the widgets to the layout.
     layout->addWidget(line);
     layout->addWidget(hello);

     line->setFocus();

     QObject::connect(hello, SIGNAL(clicked()), line, SLOT(selectAll()));
     QObject::connect(line, SIGNAL(returnPressed()), line, SLOT(selectAll()));

     window->show();
     return app.exec();
 }

وماذا line->setFocus() تعيين التركيز على خط بدء التشغيل القطعةapp فقط إذا ما وضعت بعد أن وضع من الحاجيات، وإذا استخدمت من قبل انها لا تعمل؟

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

المحلول

يرتبط تركيز لوحة المفاتيح لالقطعة <لأ href = "HTTPS: //doc.qt.io/qt-5/qwidget.html#setTabOrder "يختلط =" نوفولو noreferrer "> ترتيب الجدولة ، وترتيب الجدولة الافتراضية <م> يقوم على أساس الترتيب الذي يتم بناء الحاجيات . لذلك، وخلق المزيد من الحاجيات يغير تركيز لوحة المفاتيح. هذا هو السبب الذي يجب جعل QWidget::setFocus استدعاء الماضي.

وأود أن النظر في استخدام الطبقة الفرعية من QWidget عن الإطار الرئيسي الخاص بك الذي يتجاوز في وظيفة افتراضية showEvent ثم يحدد تركيز لوحة المفاتيح إلى lineEdit. وسيكون لذلك تأثير إعطاء دائما التركيز lineEdit عندما يتم عرض نافذة.

نصائح أخرى

وحيلة أخرى التي يمكن أن تعمل عن طريق استخدام الموقت singleshot:

QTimer::singleShot(0, line, SLOT(setFocus()));

وعلى نحو فعال، وهذا يستدعي فتحة setFocus() مثيل QLineEdit مباشرة بعد نظام الحدث هو "الحرة" للقيام بذلك، أي في وقت ما بعد هي التي شيدت القطعة تماما.

ولعل هذا هو التحديث كما كانت الإجابة الأخيرة في عام 2012 وOP التعديل الأخير تم السؤال في عام 2014. وهي الطريقة حصلت على هذا العمل كان لتغيير السياسات وثم تعيين التركيز.

line->setFocusPolicy(Qt::StrongFocus);
line->setFocus();

في كيو تي setFocus () هي فتحة، يمكنك أن تجرب طريقة أخرى مثقلة التي تأخذ معلمة كيو تي :: FocusReason مثل الخط هو مبين أدناه:

line->setFocus(Qt::OtherFocusReason);

ويمكنك أن تقرأ عن خيارات التركيز السبب في الرابط التالي:

http://doc.trolltech.com/4.4/qt.html # FocusReason-التعداد

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