質問

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-列挙する

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top