Проблема в том, что событие Qt HoverEnter работает только при нажатии на виджет.
Этот код работает с моей конфигурацией: https://gist.github.com/peteristhegreat ... 869be36f77
(из Как реализовать QHoverEvent в Qt?).
Поэтому я не понимаю, почему это не работает в моем случае. Возможно, мне не хватает флага распространения событий между моим QGraphicsScene и моим QPushButton.
Это сбивает с толку, потому что я уже успешно создал код для обработки QEvent::HoverEnter, но для области прокрутки.
Этот код работает отдельно, но в моем реальном проекте — нет:
Код: Выделить всё
#ifndef HOVERBUT_H
#define HOVERBUT_H
#include
#include
#include
#include
#include
#include
class hoverBut : public QPushButton
{
Q_OBJECT
public:
explicit hoverBut(QWidget *parent = nullptr){
setAttribute(Qt::WA_Hover);
setText("not Hover");
}
protected:
bool event(QEvent * e) override
{
//qDebug() type())
{
case QEvent::HoverEnter:
setText("Hover !");
return true;
case QEvent::HoverLeave:
setText("not Hover");
return true;
default:
return QPushButton::event(e);
}
}
};
class MainView : public QGraphicsView
{
Q_OBJECT
public:
explicit MainView(QWidget *parent = 0){
setAttribute(Qt::WA_DeleteOnClose);
//setWindowState(Qt::WindowFullScreen);
scene = new QGraphicsScene;
setScene(scene);
hoverBut* but = new hoverBut;
scene->addWidget(but);
}
protected:
void resizeEvent(QResizeEvent *event){
scene->setSceneRect(0,0,this->width()-5,this->height()-5);
}
QGraphicsScene* scene = nullptr;
};
#endif // HOVERBUT_H
Код: Выделить всё
virtual bool hoverBut::event(QEvent*) QEvent::UpdateRequest
virtual bool hoverBut::event(QEvent*) QEvent::WindowDeactivate
virtual bool hoverBut::event(QEvent*) QEvent::UpdateRequest
virtual bool hoverBut::event(QEvent*) QEvent::Paint
Код: Выделить всё
virtual bool hoverBut::event(QEvent*) QEvent::HoverEnter
Подробнее здесь: https://stackoverflow.com/questions/784 ... is-clicked