Qt悬浮窗实现
曾经尝试用鼠标事件’ void mousePressEvent(QMouseEvent *event);'实现,但是鼠标离开控件的行为比较难监控
下面的方法比较简单

用事件过滤器实现
进入控件时自动浮现
离开控件时自动关闭
bool eventFilter(QObject *watched, QEvent *event);
bool RecentDataItem::eventFilter(QObject *watched, QEvent *event)
{
qDebug()<<__pretty_function__>
if(this == watched ) {
if(QEvent::Enter == event->type()) {
//鼠标进入
if(infodialog_float==nullptr){
infodialog_float=new InfoDialog();//一个自定义全局变量相当于QWidget
QPoint point = QCursor::pos();
point.rx() = point.x() + 100 ;
point.ry() = point.y() ;
infodialog_float->move(point);
infodialog_float->SetInfo(dataentry_in);
infodialog_float->setWindowFlags(Qt::FramelessWindowHint);
infodialog_float->raise();
infodialog_float->show();
return true;
}
}
else if (QEvent::Leave == event->type()) {
//鼠标离开
if(infodialog_float!=nullptr){
delete infodialog_float;
infodialog_float=nullptr;
return true;
}
}
}
return QWidget::eventFilter(watched, event);
}
安装时间过滤器
this->setMouseTracking(true);
this->installEventFilter(this);
本文详细介绍了如何使用Qt通过鼠标事件和事件过滤器来创建一个响应鼠标进入和离开的浮动窗口。作者分享了自定义全局变量和使用`eventFilter`函数来监控鼠标行为,以实现在鼠标移动时窗口的显示与隐藏。
710

被折叠的 条评论
为什么被折叠?



