Qt编写的遮罩层窗体

PS:亲测有效!


转:http://www.qtcn.org/bbs/read-htm-tid-62394.html


最近接了个私活,需要在弹框的窗体背后遮罩原有主窗体,使得突出显示弹窗窗体,突然想到之前写过一个全局截屏的东东,原理一致,拿来改改。
优点:只需要引入一个头文件和实现文件即可,在主窗体中设置下需要遮罩的主窗体和可能弹窗窗体的类名即可。就是如此简单。

  1. //第一步,设置需要遮罩的父窗体
  2.     MaskWidget::Instance()->setMainWidget(this);
  3.     //第二步,设置哪些弹窗窗体需要被遮罩
  4.     QStringList dialogNames;
  5.     dialogNames << "frm1" << "frm2";
  6.     MaskWidget::Instance()->setDialogNames(dialogNames);
附带的全局截屏类,也是只要一行代码即可在项目任何地方使用全局截屏。
  1. ScreenWidget::Instance()->showFullScreen();
是不是接口极为简单方便呢。
效果图:

项目案例图:


源码 下载  maskdemo.zip (158 K) 下载次数:169 
PS:支持从Qt4.6到Qt5.8任意版本+任意 编译 器。
近期颈椎疼,可能本站活跃度会大大降低一段时间,修养修养!


、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

网友:

回 919974096 的帖子
919974096 :有一个问题,在弹出弹窗一出现遮罩后,然后点击任务栏图标隐藏出现,就没有遮罩了。。
 (2016-12-29 14:07) 

需要在maskwidget构造函数中加一句,设置个置顶显示。
this->setWindowFlags(Qt::FramelessWindowHint | Qt::Tool | Qt::WindowStaysOnTopHint);
然后在事件过滤器中将弹窗窗体激活。
bool MaskWidget::eventFilter(QObject *obj, QEvent *event)
{
    if (event->type() == QEvent::Show) {
        if (dialogNames.contains(obj->objectName())) {
            this->show();
            QWidget *w = (QWidget *)obj;
            w->activateWindow();
        }
    } else if (event->type() == QEvent::Hide) {
        if (dialogNames.contains(obj->objectName())) {
            this->hide();
        }
    }

    return QObject::eventFilter(obj, event);
}



  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值