33

Qt では、ウィジェットがフォーカスを受け取ると、それに関する通知をどのように受け取ることができるので、カスタム コードを実行できますか? そのためのシグナルまたはイベントはありますか?

4

8 に答える 8

39

en を追加できevent filterます。
これはQtCreatorで書かれたアプリケーションの例です。このフォームには、コンボボックスという名前のQComboBoxがあります。


MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->comboBox->installEventFilter(this);
    .
    .
    .
}

bool MainWindow::eventFilter(QObject *object, QEvent *event)
{
    if (event->type() == QEvent::FocusOut)
    {
        if (object == ui->comboBox)
        {
            qWarning(object->objectName().toLatin1().data());
        }
    }
    return false;
}
于 2010-01-02T03:01:04.617 に答える
15

Qt 4.1 で導入された、フォーカスが変更されたときに送信される「focusChanged」シグナルがあります。
これには 2 つの引数があります。ウィジェットはフォーカスを失い、ウィジェットはフォーカスを獲得します。

void QApplication::focusChanged(QWidget * old, QWidget * now)
于 2008-11-26T18:25:05.190 に答える
12

Qt Designer は、このレベルの WYSIWYG プログラミング用に設計されていません。

C++ で実行します。

class LineEdit : public QLineEdit
{
    virtual void focusInEvent( QFocusEvent* )
    {}
};
于 2008-11-27T18:36:13.200 に答える
6

最も簡単な方法は、スロットを QApplication::focusChanged シグナルに接続することです。

于 2008-12-02T14:43:54.120 に答える
2

ドキュメントfocusInEventが保護された関数であるスロットではなく、ウィジェットのサブクラスを実装している場合はオーバーライドできます。ウィジェットに入ってくるイベントをキャッチしたいだけなら、ウィジェットを使用QObject::installEventFilterしてあらゆる種類のイベントをキャッチできます。

何らかの奇妙な理由で、Trolltech の開発者は、シグナル/スロットとQEvent

于 2008-11-28T21:10:51.130 に答える
2

2 つの QMainWindow focus change を探している人がいる場合に備えて。使用できます

if(e->type() == QEvent::WindowActivate)
{
    //qDebug() << "Focus IN " << obj << e ;

}
于 2016-02-24T11:17:20.977 に答える
2

私はそれで遊ぶ必要がありますが、QTドキュメントを見るだけで、「focusInEvent」があります。これはイベント ハンドラです。

情報を見つける方法は次のとおりです.... 「QT Assistant」を開きます。インデックスに移動します。「QLineEdit」を入れます。すべてのウィジェット ページに、「継承されたメンバーを含むすべてのメンバーのリスト」という非常に便利なリンクがあります。このリストには継承されたものも含まれているため、このリストは優れています。

「フォーカス」をすばやく検索したところ、このウィジェットのフォーカスに関連するすべてのものを見つけました。

于 2008-11-26T18:30:06.600 に答える
0

QWidget::setFocus() はシグナルではなくスロットです。QLineEdit がfocus プロパティでフォーカスされているかどうかを確認できます。QLineEdit は、テキストが変更または編集されたときにシグナルを発します。ドキュメントを参照してください。

于 2008-11-27T01:19:10.923 に答える