مجموعة QLineEdit التركيز في كيو تي
سؤال
وأواجه سؤال كيو تي. أريد القطعة 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);
ويمكنك أن تقرأ عن خيارات التركيز السبب في الرابط التالي: