首页 > 其他分享 >Qt弹窗,点击非弹窗区域外,自动隐藏弹窗;

Qt弹窗,点击非弹窗区域外,自动隐藏弹窗;

时间:2024-10-16 15:45:25浏览次数:1  
标签:Qt qApp ptPos pCalendar 自动隐藏 event 弹窗

 // 下面三个函数监听全局的隐藏事件, 为了保证客户端不可见的时候日历隐藏
    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();//一定要加这个激活窗口,点击其他地方会是弹窗状态由激活状态变为未激活,然后触发
    //m_pCalendar->SetCurrentDateTime(ptr_progress_bar->GetCurrentDateTime());
}

 

标签:Qt,qApp,ptPos,pCalendar,自动隐藏,event,弹窗
From: https://www.cnblogs.com/bclshuai/p/18470111

相关文章

  • 基于RabbitMQ(windows)的MQTT(WSS)的安装配置和使用
    RabbitMQ官网地址https://www.rabbitmq.com/1.安装Erlang/OTP2.安装RabbitMQ3.开启后台管理rabbitmq-pluginsenablerabbitmq_managementhttp://127.0.0.1:15672/#/ 用户名密码默认guest4.开启mqttrabbitmq-pluginsenablerabbitmq_mqtt开启webmqttrabbitmq-pluginsenab......
  • QT打包exe(含错误解决方法)
    打包工具windeployqt.exe运行报错QT5core库链接有问题把打包工具路径下的libstdc++-6.dll文件粘贴到目标路径下(可以看到两个文件的大小是有差别的,具体原因未知)参考https://blog.csdn.net/hanhui22/article/details/109595193......
  • PyQt5 使用 Pyinstaller+multiprocessing 打包多进程应用时,引发的一些问题
    解决Pyinstaller打包PyQt5+multiprocessing多进程应用时,引发的一些问题,包括反复启动主进程,以及:AttributeError:'NoneType'objecthasnoattribute'write'本文提供一些解决方案,您可能需要根据自己的实际情况,逐个尝试,直到自己的multiprocessing多进程应用正常运行一、解决......
  • qt5报错无法枚举xxx字体:qt.qpa.fonts: Unable to enumerate family ' "WenYue XinQing
    问题描述:使用qt5时,出现错误提示:qt.qpa.fonts:Unabletoenumeratefamily'"WenYueXinQingNianTi(Non-CommercialUse)"'虽然不影响正常使用,但是还是希望解决。猜测:可能是qt5在自动枚举字体时,系统中安装的字体名称过长或其他参数不合规导致qt5无法枚举。如果此字体不是项......
  • QT实现改变窗口大小其子控件也自动调节大小
    创建一个顶层布局即可,一定要在MainWindows或者Widget的下面! 观察图标变化带有禁止的意思是分拆布局(当前无布局)现在是添加布局后了 注意:一定是在MainWindows或Widget才可以添加顶层布局,才可以实现控件自适应现在我想实现的是文字跟随变化,效果图如下所以我们利用......
  • QT的信号与槽
    提出疑问:界面上已经有的按键,怎么操作才能让用户按下按键后有操作上的反应呢?在Qt中,信号和槽机制是一种非常强大的事件通信机制。这是一个重要的概念,特别是对于初学者来说,理解它对于编写Qt程序至关重要。信号(Signals):是由对象在特定事件发生时发出的消息。例如,QPushButt......
  • MQTTnet.Server同时支持mqtt及websocket协议
    Net6后写法 Net6前写法Program.csusingMicrosoft.AspNetCore.Hosting;usingMicrosoft.Extensions.Configuration;usingMicrosoft.Extensions.Hosting;usingMQTTnet.AspNetCore;usingSystem;usingSystem.IO;namespaceMQTTnet.Server{publicclassProgra......
  • PyQt5开发环境搭建和配置
    PyQt5工具可以快速实现简单的界面开发,包括界面设计、布局管理以及业务逻辑实现(信号与槽)。简单说就是使用PyQt5工具可以快速画一个控件摆放整齐、界面整洁有序、布局合理的界面。课程目标可以动手实现简单的GUI程序。系列文章主要以动手实践案例讲解为主。课程对象会一些......
  • 【QT】常用控件(一)
    个人主页~常用控件一、控件是什么二、QWidget核心属性1、enabled2、geometry3、windowTitle4、windowIcon5、windowOpacity6、cursor7、font8、toolTip9、focusPolicy10、styleSheet一、控件是什么ui设计界面左边的这些都叫控件,除了这些以外,QT还允许自定义控件,满......
  • 【qt】一个动画实现
    基于https://www.bilibili.com/video/BV1Li421Y7EH/?spm_id_from=333.999.top_right_bar_window_history.content.click原理的一个qt实现#pragmaonce#include<QWidget>#include"ui_Worm.h"#include<QPointF>#include<QList>#include<QPai......