千家信息网

Qt遮罩层窗体怎么实现

发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,本篇内容主要讲解"Qt遮罩层窗体怎么实现",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Qt遮罩层窗体怎么实现"吧!一、前言在有些项目中,需要在弹框的窗体背
千家信息网最后更新 2025年02月03日Qt遮罩层窗体怎么实现

本篇内容主要讲解"Qt遮罩层窗体怎么实现",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Qt遮罩层窗体怎么实现"吧!

一、前言

在有些项目中,需要在弹框的窗体背后遮罩原有主窗体,使得突出显示弹窗窗体,突然想到之前写过一个全局截屏的东东,原理一致,拿来改改。只需要引入一个头文件和实现文件,然后在主窗体中设置下需要遮罩的主窗体和可能弹窗窗体的类名即可,就是如此简单。可以支持多个窗体列表。 原理很简单,先安装事件过滤器,拦截QEvent::Show事件,拿到当前窗体,如果在需要遮罩的窗体列表中,则弹出半透明的窗体,大小和弹出的窗体大小一致,然后在激活当前弹出的窗体。

二、代码思路

//使用方法//第一步,设置需要遮罩的父窗体MaskWidget::Instance()->setMainWidget(this);//第二步,设置哪些弹窗窗体需要被遮罩QStringList dialogNames;dialogNames << "frm1" << "frm2";MaskWidget::Instance()->setDialogNames(dialogNames);//核心代码void MaskWidget::setDialogNames(const QStringList &dialogNames){    if (this->dialogNames != dialogNames) {        this->dialogNames = dialogNames;    }}void MaskWidget::setOpacity(double opacity){    this->setWindowOpacity(opacity);}void MaskWidget::setBgColor(const QColor &bgColor){    QPalette palette = this->palette();    palette.setBrush(QPalette::Background, bgColor);    this->setPalette(palette);}void MaskWidget::showEvent(QShowEvent *){    if (mainWidget != 0) {        this->setGeometry(mainWidget->geometry());    }}bool MaskWidget::eventFilter(QObject *obj, QEvent *event){    if (event->type() == QEvent::Show) {        if (dialogNames.contains(obj->objectName())) {            this->show();            this->activateWindow();            QWidget *w = (QWidget *)obj;            w->activateWindow();        }    } else if (event->type() == QEvent::Hide) {        if (dialogNames.contains(obj->objectName())) {            this->hide();        }    } else if (event->type() == QEvent::WindowActivate) {        //当主窗体激活时,同时激活遮罩层        if (mainWidget != 0) {            if (obj->objectName() == mainWidget->objectName()) {                if (this->isVisible()) {                    this->activateWindow();                }            }        }    }    return QObject::eventFilter(obj, event);}

三、效果图

到此,相信大家对"Qt遮罩层窗体怎么实现"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

0