亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Qt遮罩層窗體怎么實現

發布時間:2021-12-15 10:38:58 來源:億速云 閱讀:238 作者:iii 欄目:互聯網科技

本篇內容主要講解“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遮罩層窗體怎么實現

到此,相信大家對“Qt遮罩層窗體怎么實現”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

qt
AI

闵行区| 伊吾县| 阿拉善左旗| 阿拉尔市| 本溪| 留坝县| 武鸣县| 泰和县| 怀柔区| 都江堰市| 舒城县| 南陵县| 白玉县| 常山县| 麻江县| 吉林省| 钟祥市| 屏东县| 达拉特旗| 来凤县| 华宁县| 区。| 五峰| 类乌齐县| 安泽县| 外汇| 客服| 荥经县| 宁远县| 德江县| 郓城县| 克什克腾旗| 兴和县| 遵义市| 尚义县| 奉节县| 敖汉旗| 肇庆市| 玛纳斯县| 增城市| 图木舒克市|