美文网首页
qt事件过滤器妙用

qt事件过滤器妙用

作者: 豪爵吸金ing | 来源:发表于2024-08-18 21:17 被阅读0次

TestMenu派生自QMenu,popUp显示出来后,期望点击程序其它位置时,主动关闭该界面。通过事件过滤器,可以很方便的实现。
具体代码如下:

bool EventFilter::eventFilter(QObject *watched, QEvent *event)  {
    if (event->type() == QEvent::MouseButtonPress) {
        QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
        QPoint globalPos = mouseEvent->globalPos();
        QPoint localPos = menu->mapFromGlobal(globalPos);
        if (menu && menu->isVisible()) {
            if(!menu->rect().contains(localPos))
                menu->close();
        }
    }
    return QObject::eventFilter(watched, event);
}
TestMenu::TestMenu(QWidget *parent):QMenu(parent){
    setAttribute(Qt::WA_TranslucentBackground);
     setWindowFlags(Qt::FramelessWindowHint | Qt::Tool);
    this->setStyleSheet(menuBgQSS);

    filter = new EventFilter(this);
    qApp->installEventFilter(filter);
}

TestMenu::~TestMenu(){
    qApp->removeEventFilter(filter);
}

相关文章

  • Day04

    Qt对象模型 信号和槽、对象属性系统、事件和事件过滤器、国际化翻译机制、定时器驱动、守卫指针(QPoint)、动态...

  • 一个 Qt 事件对象的旅行

    Qt 的事件来自操作系统,Qt自己产生。当Qt应用程序运行时,qt有一个未处理的事件队列,每个事件处理周期内,将处...

  • Qt中事件的理解(1)

    1、Qt中的事件 Qt中,事件作为一个对象,继承自QEvent类,常见的有键盘事件QKeyEvent、鼠标事件QM...

  • 08-web3j过滤器与事件

    过滤器和事件(Filters and Events) 过滤器提供发生在Ethereum网络的事件通知。在Ether...

  • Qt学习-(虚函数,界面原理等)

    Qt学习 事件:事件在Qt分很多种,例如鼠标,键盘,定时器,窗体大小,任何动作在GUI都可以触发某种事件, 根据C...

  • Qt开发系列3——Qt中的核心技术1

    简介 这里简单介绍Qt的一些核心机制,具体参见Qt文档。 主要包含内容: Qt的信号和槽,以及事件机制 Qt Ob...

  • 2020-11-20 Qt事件循环

    一 Qt事件循环:从队列中不断取出消息、处理消息的过程。 Qt会接管windows的原生窗口消息,翻译成Qt消息,...

  • 10 2.0 for循环和自定义键盘事件和过滤器

    for循环 自定义键盘事件 过滤器

  • QT事件循环

    Qt 事件和信号的关系 Qt的事件是windows的底层消息封装而成的。这个消息和MFC里的消息是同一概念,都是指...

  • logstash DATE过滤插件

    说明 日期过滤器用于解析字段中的日期,然后使用该日期或时间戳作为事件的logstash时间戳。 日期过滤器对于事件...

网友评论

      本文标题:qt事件过滤器妙用

      本文链接:https://www.haomeiwen.com/subject/zhapkjtx.html