マウスを離したときに 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;
};