隐藏窗口小部件时不保留事件

时间:2013-11-11 13:56:57

标签: qt

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

0 个答案:

没有答案