我想在释放鼠标时隐藏 QLabel 小部件。一切正常,除了当我在 mouseReleaseEvent 中调用 QLabel::hide() 时没有调用 leaveEvent。
当我正常离开标签时(显示时),该方法被正确调用,但在我调用 hide() 方法时却没有。我试图在 mouseReleaseEvent 之外调用 hide()(使用 QTimer),但仍然没有调用 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;
};