AP0805319 2023-06-28 09:54 采纳率: 0%
浏览 42

QT中,弹出的子窗口如何获取该子窗口区域以外的鼠标点击事件

在QT中,弹出的子窗口如何获取该子窗口区域以外的鼠标点击事件?即父窗口全屏状态下弹出了一个模态的子窗口,当鼠标点击该子窗口以外的父窗口区域时,让该子窗口获取到该点击事件。
子窗口创建:

TipFrameBase::TipFrameBase(QWidget *parent):QDialog(parent)
{
    this->setMouseTracking(true);
    this->setFixedSize(660,360);
    this->setWindowFlags(Qt::Dialog|Qt::FramelessWindowHint | Qt::NoDropShadowWindowHint|Qt::WindowSystemMenuHint|Qt::WindowMinimizeButtonHint|Qt::WindowMaximizeButtonHint);
    this->setWindowModality(Qt::WindowModal);  //修改其为模态窗口
    this->setAttribute(Qt::WA_TranslucentBackground);//背景半透明属性设置



}

子窗口的mousePressEvent只能收到该子窗口的鼠标点击事件,不能收到子窗口以外的

void TipFrameBase::mousePressEvent(QMouseEvent *event)
{

}
  • 写回答

4条回答 默认 最新

  • java入门选手 2023-06-28 09:59
    关注

    基于new bing部分指引作答:
    在Qt中,您可以通过设置子窗口的属性来实现在子窗口之外捕获鼠标点击事件的效果。以下是一种可能的方法:

    1. 在子窗口类的构造函数或初始化函数中,设置Qt::Window属性为Qt::WindowTransparentForInput,这将使子窗口对鼠标点击事件透明。
    setWindowFlags(Qt::WindowTransparentForInput);
    
    1. 重写子窗口类的eventFilter函数,并在该函数中捕获父窗口的鼠标点击事件。
    bool ChildWindow::eventFilter(QObject *obj, QEvent *event)
    {
        if (event->type() == QEvent::MouseButtonPress || event->type() == QEvent::MouseButtonRelease)
        {
            QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
            // 检查鼠标事件是否发生在父窗口区域之外
            if (!parentWidget() || !parentWidget()->rect().contains(mouseEvent->globalPos()))
            {
                // 处理相应的鼠标点击事件
                // ...
            }
        }
        return QWidget::eventFilter(obj, event);
    }
    
    1. 在子窗口类的构造函数或初始化函数中,为子窗口安装事件过滤器,以便捕获父窗口的鼠标点击事件。
    installEventFilter(this);
    

    通过以上步骤,您就可以在父窗口全屏状态下,让子窗口捕获到父窗口区域之外的鼠标点击事件了。

    请注意,以上是一种实现方式,具体的代码可能需要根据您的应用场景和需求做出适当调整。

    评论

报告相同问题?

问题事件

  • 创建了问题 6月28日

悬赏问题

  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用
  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?