Qt弹窗,点击非弹窗区域外,自动隐藏弹窗;
// 下面三个函数监听全局的隐藏事件, 为了保证客户端不可见的时候日历隐藏 bool CPlaybackCalendarWidget::eventFilter(QObject *watched, QEvent *eve) { if (eve->type() == QEvent::ApplicationStateChange)//状态改变 { if (qApp->applicationState() == Qt::ApplicationInactive || qApp->applicationState() == Qt::ApplicationHidden)//窗口未激活或者隐藏 { hide(); ptr_camera_ = nullptr; } } return QWidget::eventFilter(watched, eve); } void CPlaybackCalendarWidget::showEvent(QShowEvent *event)//应用程序范围的事件筛选器可能会对性能产生明显的影响,因此只有在必要时才应该安装它。所以show的时候安装,hide的时候去掉事件过滤; { qApp->installEventFilter(this); return QWidget::showEvent(event); } void CPlaybackCalendarWidget::hideEvent(QHideEvent *event) { qApp->removeEventFilter(this); ptr_camera_ = nullptr; return QWidget::hideEvent(event); } }
弹窗函数
void PlayBackCtrlBar::OnPopupCalendar() { QPoint ptPos = mapToGlobal(QPoint(0, 0)); ptPos.setX(ptPos.x() + (width() - m_pCalendar->width()) / 2); ptPos.setY(ptPos.y() - m_pCalendar->height()); m_pCalendar->move(ptPos); m_pCalendar->hide();//先隐藏再显示,否则会出现在主窗口下面; m_pCalendar->show(); m_pCalendar->setFocus(Qt::FocusReason::ActiveWindowFocusReason); m_pCalendar->activateWindow();//一定要加这个激活窗口,点击其他地方会是弹窗状态由激活状态变为未激活,然后触发QEvent::ApplicationStateChange
//m_pCalendar->SetCurrentDateTime(ptr_progress_bar->GetCurrentDateTime()); }
自己开发了一个股票智能分析软件,功能很强大,需要的关注微信公众号:QStockView
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix