我希望在鼠标释放时隐藏QLabel小部件。一切正常,但是当我在mouseReleaseEvent中调用QLabel :: hide()时没有调用leaveEvent。
当我正常地离开标签时(显示它)时,方法被正确调用,但是当我调用hide()方法时则不能。我试图在mouseReleaseEvent(使用QTimer)之外调用hide(),但仍未调用leaveEvent。
结果是当我再次显示标签时,当鼠标第一次进入小部件时,不会调用enterEvent,我必须向外移动(调用leaveEvent),然后再向内移动。
所以我的问题是为什么当我隐藏标签时(鼠标仍然在小部件上方)没有调用leaveEvent,并且有一种方法可以随时强制调用leaveEvent。
我希望我的解释不要太混淆。感谢。
编辑: 这是一个对我不起作用的简单示例:
struct Label : public QLabel
{
Label(QGraphicsScene *scene)
{
item.setWidget(this);
setText("Text");
scene->addItem(&item);
setMinimumWidth(200);
setMinimumHeight(200);
show();
}
~Label()
{
item.setWidget(NULL);
}
void mousePressEvent(QMouseEvent *)
{
}
void mouseReleaseEvent(QMouseEvent *)
{
std::cout << "mouseReleaseEvent" << std::endl;
hide();
}
void enterEvent(QEvent *)
{
std::cout << "Enter" << std::endl;
}
void leaveEvent(QEvent *)
{
std::cout << "Leave" << std::endl;
}
QGraphicsProxyWidget item;
};