4

QLineEditクリックだったかどうかを知りたいです。したがって、次の関数を再実装する必要があると思います(??):

void QLineEdit::focusInEvent ( QFocusEvent * e )   [virtual protected]

どうすればいいですか?

また、オブジェクトがフォーカスfocusInEvent()されたかどうかを知る関数の使い方を教えてください。QLineEdit myEdit;

編集:私は次の関数を書きました:

bool LoginDialog::eventFilter(QObject *target, QEvent *event)
{
    if (target == m_passwordLineEdit)
    {
        if (event->type() == QEvent::FocusIn)
        {
            if(checkCapsLock())
            {
                QMessageBox::about(this,"Caps Lock", "Your caps lock is ON!");

            }
            return true;

        }
    }
    return QDialog::eventFilter(target, event);
}

そして、次のようにクラスコンストラクターに登録m_passwordLineEditしました:LoginDialog

m_passwordLineEdit->installEventFilter(this);

そして、MessageBox-es の無限ループに陥っています。この状況を解決するために私を助けてください。実際には、この機能をポップアップ ウィンドウ (ではなくQMessageBox) で実装したいと考えています。その必要性のために使用しても大丈夫QLabelですか?

4

3 に答える 3

6

また、QLineEdit myEdit; かどうかを知るために focusInEvent() 関数を使用する方法を教えてください。オブジェクトがフォーカスを得ました。

次の SIGNAL に接続する必要があります。

void QApplication::focusChanged ( QWidget * old, QWidget * now )   [signal]

新しい QWidget が QLineEdit である場合、フォーカスされていることがわかります。

それが役に立てば幸い !

于 2010-06-10T09:14:19.743 に答える
4

そんな感じ:

class YourWidget : public QLineEdit
{
    Q_OBJECT

    protected:

    void focusInEvent(QFocusEvent* e);
};

.cppファイル内:

void YourWidget::focusInEvent(QFocusEvent* e)
{
    if (e->reason() == Qt::MouseFocusReason)
    {
      // The mouse trigerred the event
    }

    // You might also call the parent method.
    QLineEdit::focusInEvent(e);
}

考えられるすべての理由のリストは、このページにあります。

于 2010-06-10T07:23:43.170 に答える
0

誰かがいつウィジェットをクリックしたかを知りたい場合は、 をオーバーライドする必要がありますmousePressEvent (QMouseEvent* event)focusInEventは、マウス クリック以外のソースによってトリガーされる場合があります。

例えば:

class MyLineEdit : public QLineEdit
{
        Q_OBJECT
    public:
        //...
    protected:
         void mousePressEvent(QMouseEvent* event)
         {
              //pass the event to QLineEdit
              QLineEdit::mousePressEvent(event);
              //register the click or act on it
         }
};

ウィジェットがフォーカスを受け取るタイミングを知りたい場合はfocusInEvent、コースで同じことを行います。

于 2010-06-10T07:25:23.743 に答える