如何检测鼠标点击QLineEdit

时间:2014-03-02 13:26:29

标签: c++ qt mouseevent qlineedit

在我的QWidget中有一些subwidgets,如QLineEditQLabels。我可以轻松检查我的鼠标是否在QLabel上,以及是否在右键上单击了它。在QLineEdit上不是这样。 我试图继承QLineEdit并重新实现mouseRelease,但它永远不会被调用。 findChild方法是从我的UI中取出相应的小部件。

如何在mouseRelease中获取QLineEdit以及它是鼠标左键还是鼠标右键?

void Q_new_LineEdit::mouseReleaseEvent(QMouseEvent *e){
    qDebug() << "found release";
    QLineEdit::mouseReleaseEvent(e);
}

m_titleEdit = new Q_new_LineEdit();
m_titleEdit = findChild<QLineEdit *>("titleEdit",Qt::FindChildrenRecursively);

标识上的点击次数已被识别,但QLineEdit上的点击次数不是,如下所示:

void GripMenu::mouseReleaseEvent(QMouseEvent *event){

    if (event->button()==Qt::RightButton){ 

        //get click on QLineEdit 
        if (uiGrip->titleEdit->underMouse()){
            //DO STH... But is never called
        }

        //change color of Label ...
        if (uiGrip->col1note->underMouse()){
            //DO STH...
        }
    }

1 个答案:

答案 0 :(得分:0)

我似乎能够检测到行编辑的点击次数,并区分它在下面发布的类中的类型,这与上面提到的链接中的内容非常相似

#ifndef MYDIALOG_H
#define MYDIALOG_H

#include <QDialog>
#include <QMouseEvent>
#include <QLineEdit>
#include <QHBoxLayout>
#include <QtCore>


class MyClass: public QDialog
{
  Q_OBJECT
    public:
  MyClass() :
  layout(new QHBoxLayout),
    lineEdit(new QLineEdit)

      {
        layout->addWidget(lineEdit);
        this->setLayout(layout);
        lineEdit->installEventFilter(this);
      }

  bool eventFilter(QObject* object, QEvent* event)
    {
      if(object == lineEdit && event->type() == QEvent::MouseButtonPress) {
        QMouseEvent *k = static_cast<QMouseEvent *> (event);
        if( k->button() == Qt::LeftButton ) {
          qDebug() << "Left click";
        } else if ( k->button() == Qt::RightButton ) {
          qDebug() << "Right click";
        }
      }
      return false;
    }
 private:
  QHBoxLayout *layout;
  QLineEdit *lineEdit;

};


#endif

main.cpp的完整性

#include "QApplication"

#include "myclass.h"

int main(int argc, char** argv)
{
  QApplication app(argc, argv);

  MyClass dialog;
  dialog.show();

  return app.exec();

}