VS2022+QT6.7 窗口置灰(遮罩)

发布于:2025-02-11 ⋅ 阅读:(79) ⋅ 点赞:(0)

 本文章使用QWidget来使窗口置灰,使用按钮控制置灰功能的开启和关闭,同时被置灰的控件自动禁用交互功能。

    connect(ui.pushButton_open, &QPushButton::clicked, this, [=]() {    
        //创建无边框窗口,大小是父的大小
		QWidget* parentWidget = new QWidget(this, Qt::FramelessWindowHint);
		parentWidget->resize(this->size());
		parentWidget->setObjectName("widget");
		//设置蒙版背景色,其中140为蒙版透明度
		parentWidget->setStyleSheet("#widget {background-color:rgba(192, 192, 192, 140);}");

		//将groupBox添加到layout中。这样,groupBox就会被布局管理器管理,自动调整大小和位置
		QGroupBox* groupBox = ui.groupBox;
		QVBoxLayout* layout = new QVBoxLayout(parentWidget);
		layout->addWidget(groupBox);

		//设置groupBox背景色,跟蒙版颜色区分
		groupBox->setStyleSheet("QGroupBox { background-color: rgb(255, 255, 255); }");
		groupBox->setParent(this); //将groupBox设置为父窗口

		groupBox->raise();                  //将groupBox设置为顶层
		parentWidget->stackUnder(groupBox); //将parentWidget设置为groupBox的下层
		parentWidget->show();               //显示parentWidget
		groupBox->show();                   //显示groupBox
	    ui.textEdit->append("已置灰,自动禁用交互功能!");
   });

 以下功能是关闭置灰,不会删除parentWidget对象

	connect(ui.pushButton__close, &QPushButton::clicked, this, [=]() {
		parentWidget->close();
		ui.textEdit->append("关闭置灰!");
		});

头文件如下:包含<QGroupBox>, <QVBoxLayout>头文件,定义parentWidget、groupBox、layout对象

#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_QtWidgetsApplication1.h"
#include <QGroupBox>
#include <QVBoxLayout>

class QtWidgetsApplication1 : public QMainWindow
{
    Q_OBJECT

public:
    QtWidgetsApplication1(QWidget *parent = nullptr);
    ~QtWidgetsApplication1();
    QWidget* parentWidget;
    QGroupBox* groupBox;
    QVBoxLayout* layout;
private:
    Ui::QtWidgetsApplication1Class ui;
};

  UI界面如下:0ef7295433504189a4463ad9a012c98d.png

效果如下:

9f100d80414e40b1bd827a0b3724a5ff.png

开启置灰

 

9646a85128184997829713994ca9d6da.png

关闭置灰

 


网站公告

今日签到

点亮在社区的每一天
去签到