如何知道QLineEdit是否得到了关注?

时间:2010-06-10 07:13:15

标签: c++ qt qlineedit

我希望能够知道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来满足这种需求?

3 个答案:

答案 0 :(得分:6)

  

另外,请告诉我如何使用   focusInEvent()函数以便   知道QLineEdit myEdit;对象得到了   对焦。

您应该将自己连接到以下信号:

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

当新的QWidget是您的QLineEdit时,您知道它得到了关注!

希望它有所帮助!

答案 1 :(得分: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);
}

您可以找到所有可能原因的列表on this page

答案 2 :(得分: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当然。