Reputation: 346
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
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