Anonymous
Anonymous

Reputation: 346

QTreeWidget MouseMove event is not called

Here is the code

#include <QTreeWidget>
#include <QEvent>

class CustomTreeWidget: public QTreeWidget
{
    Q_OBJECT
public:
    CustomTreeWidget(QWidget *parent = nullptr);

protected:
    bool eventFilter(QObject *target, QEvent *event) override;

private:
    Q_SLOT void OnItemEntered(QTreeWidgetItem *item, int column);
};
CustomTreeWidget::CustomTreeWidget(QWidget *parent) :
    QTreeWidget(parent)
{
    this->installEventFilter(this);
    this->setMouseTracking(true);
    connect(this, &ImageFilterTreeWidget::itemEntered, this, &ImageFilterTreeWidget::OnItemEntered);
}

bool CustomTreeWidget::eventFilter(QObject *target, QEvent *event)
{
    if(event->type() == QEvent::MouseMove)
    {
       // This piece of code is never called            
    }

    return false;
}

void CustomTreeWidget::OnItemEntered(QTreeWidgetItem *item, int column)
{
    //setting some variables based on *item
}

What am I missing? Why MouseMove signal is never caught? The application does not have any other widget and has no other functionality

Upvotes: 0

Views: 378

Answers (1)

G.M.
G.M.

Reputation: 12899

QTreeWidget inherits QAbstractScrollArea so you need to intercept the mouse move events in the associated viewport rather then the QTreeWidget itself...

CustomTreeWidget::CustomTreeWidget (QWidget *parent)
  : QTreeWidget(parent)
{
    viewport()->setMouseTracking(true);
    viewport()->installEventFilter(this);
    connect(this, &ImageFilterTreeWidget::itemEntered, this, &ImageFilterTreeWidget::OnItemEntered);
}

Upvotes: 1

Related Questions