2

我想在释放鼠标时隐藏 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;
};
4

0 回答 0