2

マウスを離したときに QLabel ウィジェットを非表示にしたいと考えています。mouseReleaseEvent 内で QLabel::hide() を呼び出したときに leaveEvent が呼び出されないことを除いて、すべて正常に動作します。

ラベルを通常どおりに (ラベルが表示されている間) 離れると、メソッドは適切に呼び出されますが、 hide() メソッドを呼び出すと呼び出されません。(QTimer を使用して) mouseReleaseEvent の外で 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;
};
4

0 に答える 0