知道在LeaveEvent里面输入了哪个QWidget

时间:2014-11-06 12:23:25

标签: c++ qt

我正在实现一个QDialog,当鼠标光标离开QFrame时,它会在另一个QWidget(一个QFrame)悬停并被销毁时显示出来。我通过enterEvent和leaveEvent(在QFrame中)进行构造和销毁:

void Frame::enterEvent(QEvent *) {
    m_dialog = new Dialog(this);
}

void Frame::leaveEvent(QEvent *) {
    m_dialog->deleteLater();
}

对话框在构造时会自动移动到框架下方。到目前为止一切顺利,但鼠标光标也必须能够进入对话框。我想过像这样使用underMouse():

void Frame::leaveEvent(QEvent *) {
    if (! m_dialog->underMouse()) {
        m_dialog->deleteLater();
    }
}

但问题是在Frame :: leaveEvent中,m_dialog-> underMouse()总是为false,即使鼠标移到它上面也是如此。

如果鼠标现在在对话框或其他地方,我怎么知道在Frame :: leaveEvent中?

1 个答案:

答案 0 :(得分:0)

我可以通过以下方式实现它:

对话框的leaveEvent触发零计时器调用" target"小部件(光标可以在不破坏对话框的情况下移动的小部件)。此函数检查此窗口小部件当前是否位于鼠标光标下。如果是这样,没有任何反应如果没有,该对话框将被该窗口小部件销毁。

" target"的leaveEvent相同小部件,它通过零计时器调用在对话框内以相同方式实现的功能。