我正在实现一个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中?
答案 0 :(得分:0)
我可以通过以下方式实现它:
对话框的leaveEvent触发零计时器调用" target"小部件(光标可以在不破坏对话框的情况下移动的小部件)。此函数检查此窗口小部件当前是否位于鼠标光标下。如果是这样,没有任何反应如果没有,该对话框将被该窗口小部件销毁。
" target"的leaveEvent相同小部件,它通过零计时器调用在对话框内以相同方式实现的功能。