23

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 の起動にフォーカスを設定するのはなぜですか?

4

4 に答える 4

26

うまくいくかもしれない別のトリックは、singleshotタイマーを使用することです。

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

事実上、これは、イベント システムが「自由」になった直後、つまりウィジェットが完全に構築された後、インスタンスのsetFocus()スロットを呼び出します。QLineEdit

于 2009-03-07T23:08:12.233 に答える
26

キーボード フォーカスはウィジェットのタブ オーダーに関連しており、デフォルトのタブ オーダーはウィジェットが構築された順序に基づいています。したがって、さらにウィジェットを作成すると、キーボード フォーカスが変更されます。そのため、QWidget::setFocus呼び出しを最後にする必要があります。

QWidget仮想関数をオーバーライドし、showEventキーボード フォーカスを に設定するメイン ウィンドウに のサブクラスを使用することを検討しますlineEditlineEditこれにより、ウィンドウが表示されているときに常にフォーカスを与える効果があります。

于 2009-02-09T16:40:20.077 に答える
4

最後の回答は2012年で、OPが最後に質問を編集したのは2014年だったので、おそらくこれは更新です。私がこれを機能させる方法は、ポリシーを変更してからフォーカスを設定することでした。

line->setFocusPolicy(Qt::StrongFocus);
line->setFocus();
于 2016-09-10T19:39:45.527 に答える
1

Qt では setFocus() はスロットです。以下に示す行のように、Qt::FocusReason パラメーターを取る他のオーバーロードされたメソッドを試すことができます。

line->setFocus(Qt::OtherFocusReason);

フォーカス理由のオプションについては、次のリンクを参照してください。

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

于 2009-02-09T00:44:13.807 に答える