문제

QT 질문이 있습니다. 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 스타트 업에 초점을 맞추고 작동하지 않기 전에 사용하는 경우에만 초점을 맞 춥니 다.

도움이 되었습니까?

해결책

키보드 초점 위젯과 관련이 있습니다 탭 순서, 및 기본 탭 순서 위젯이 구성된 순서를 기준으로합니다.. 따라서 더 많은 위젯을 만들면 키보드 초점이 변경됩니다. 그것이 당신이 만들어야하는 이유입니다 QWidget::setFocus 마지막으로 전화하십시오.

하위 클래스를 사용하는 것을 고려할 것입니다 QWidget 당신의 기본 창은 showEvent 가상 함수와 키보드 초점을 설정합니다 lineEdit. 이것은 항상주는 효과가 있습니다 lineEdit 창이 표시되면 초점.

다른 팁

작동 할 수있는 또 다른 트릭은 사용하는 것입니다 singleshot 시간제 노동자:

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

효과적으로 이것은 다음을 호출합니다 setFocus() 슬롯 QLineEdit 이벤트 시스템 직후 인스턴스가 "무료"인 경우, 위젯이 완전히 구성된 후 언젠가는 그렇습니다.

아마도 이것은 2012 년에 마지막 답변이 있었기 때문에 업데이트 일 것입니다. OP는 2014 년에 마지막으로 질문을 편집했습니다. 제가이 작업을 수행 한 방법은 정책을 변경 한 다음 초점을 맞추는 것이 었습니다.

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

QT setFocus ()에서 슬롯이 있는데, 아래에 표시된 줄과 같이 QT :: FocusReason 매개 변수를 취하는 다른 과부하 메소드를 시도 할 수 있습니다.

line->setFocus(Qt::OtherFocusReason);

다음 링크에서 초점 이유 옵션에 대해 읽을 수 있습니다.

http://doc.trolltech.com/4.4/qt.html#focusreason-enum

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top