문제
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);
다음 링크에서 초점 이유 옵션에 대해 읽을 수 있습니다.