以下是代码
#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
}我遗漏了什么?为什么MouseMove信号永远不会被捕获?应用程序没有任何其他微件,也没有其他功能
发布于 2020-10-25 21:03:48
QTreeWidget继承了QAbstractScrollArea,因此您需要在关联的视窗中截获鼠标移动事件,而不是QTreeWidget本身……
CustomTreeWidget::CustomTreeWidget (QWidget *parent)
: QTreeWidget(parent)
{
viewport()->setMouseTracking(true);
viewport()->installEventFilter(this);
connect(this, &ImageFilterTreeWidget::itemEntered, this, &ImageFilterTreeWidget::OnItemEntered);
}https://stackoverflow.com/questions/64523816
复制相似问题