自定义QDialog添加蒙版

阅读数:217 评论数:0

跳转到新版页面

分类

C/C++

正文

#include <QDialog>
#include <QApplication>
#include <QScreen>
#include <QWidget>

class CustomDialog : public QDialog {
public:
    CustomDialog(QWidget *parent = nullptr) : QDialog(parent) {
        // 设置对话框为模态
        setModal(true);
// 在对话框构造函数中或者在显示对话框之前设置
setStyleSheet("CustomDialog {"
               "border-radius: 10px;" // 设置圆角半径
               "background-color: rgba(255, 255, 255, 220);" // 设置背景颜色和透明度
               "}");

// 设置对话框背景为透明
setAttribute(Qt::WA_TranslucentBackground);

// 如果需要的话,还可以去除窗口装饰(例如标题栏)
setWindowFlags(windowFlags() | Qt::FramelessWindowHint);
    }

protected:
    void showEvent(QShowEvent *event) override {
        // 当对话框显示时,创建蒙版
        mask = new QWidget(parentWidget()); // 使用主窗口作为父窗口
        mask->setStyleSheet("background-color: rgba(0, 0, 0, 128);"); // 半透明蒙版
        mask->setGeometry(parentWidget()->geometry()); // 使用主窗口的几何信息
        mask->show();
        mask->raise();
        raise(); // 确保对话框在蒙版之上

        QDialog::showEvent(event);
    }

    void hideEvent(QHideEvent *event) override {
        // 当对话框隐藏时,移除蒙版
        if (mask) {
            mask->close();
            delete mask;
            mask = nullptr;
        }

        QDialog::hideEvent(event);
    }

private:
    QWidget *mask = nullptr;
};

1、如果你想要获得主窗口的大小而不是对话框的大小,你应该在创建蒙版时考虑到这一点。你可以通过传入的parent参数(假设它是主窗口)来获取主窗口的位置和大小。如果parent是主窗口的话,你可以直接使用parentWidget()来获取这些信息。

2、在Qt中,raise() 函数是QWidget 类的一个成员函数,它的作用是将窗口或者窗口部件置于其兄弟窗口的顶部。在多窗口应用程序中,通常存在多个可以重叠的窗口。如果这些窗口彼此重叠,raise() 函数可以用来确保特定的窗口显示在最上面,从而使其成为用户当前可交互的窗口。

3、在Qt的样式表中,border-radius 属性同样用于设置控件的圆角边框。不过,与CSS不同的是,Qt样式表(QSS)不支持单独为每个角设置不同的半径值。在Qt样式表中,border-radius 应用于所有四个角。

如果你想要只为特定的角设置圆角,例如只为左上角和右上角设置圆角,你需要使用一种特殊的方法,因为标准的 border-radius 属性不支持这样的操作。

一种常用的技巧是利用Qt的子控件选择器。你可以为控件的各个角设置不同的子控件,并对这些子控件应用不同的样式。以下是一个简单的例子:

// 设置左上角和右上角圆角的样式
myWidget->setStyleSheet(
    "MyWidget {"
    "  border-top-left-radius: 10px;"  // 设置左上角圆角
    "  border-top-right-radius: 10px;" // 设置右上角圆角
    "  border-bottom-left-radius: 0px;"  // 设置左下角无圆角
    "  border-bottom-right-radius: 0px;" // 设置右下角无圆角
    "}"
);



相关推荐

一、概述 QT是一个跨平台的C++库,主要用来开发图形界面(GUI)程序,它支持多种操作系统 ,如Windows、Linux、Android、ios、gnx、vxworks。 官网:https://w

一、预览 通过窗体-预览 或者 ctrl+R打开预览。 可以使用不同的内置风格、新式表、设备皮肤进行预览。在应用程序可以通过调用QApplication::setStyleSheet()来加载样式表实

代码编辑: Ctrl + Space: 激活代码补全 Ctrl + /: 注释/取消注释当前行或选定代码 Ctrl + I: 自动缩进选定代码 Ctrl + Shift + U: 转换选定文本为大写

在 Qt 中,输出变量值通常是用于调试目的,你可以使用多种方法来打印或显示变量的值。以下是一些常见的方法: 1、使用 qDebug: qDebug 是 Qt 中用于输出调试信息的宏。它可以将输出发送到

在 Qt 中全局加载一个 TTF 字体文件并使用它,你可以在程序初始化时期,比如在 main 函数中加载字体。以下是加载全局字体的步骤: 加载字体文件:使用 QFontDatabase::addAp

一、对于窗口 (QMainWindow, QDialog, 等): 1、move() 方法: 使用 move() 方法可以将窗口移动到屏幕上的指定位置。 QMainWindow *window = n

Qt框架中使用new关键字创建的对象通常需要手动释放,但是Qt提供了一种父子关系机制,可以自动管理对象的内存。当你使用new创建一个对象并将其分配给一个父QObject时,这个对象将会在父对象被销毁时

在Qt中,border-radius 在样式表中不会对顶层窗口生效。顶层窗口是指没有父窗口的窗口,通常是您的应用程序的主窗口或者独立的弹出窗口。由于安全性和平台兼容性的原因,很多样式表中的属性在顶层窗

在Qt中,connect函数用于连接信号和槽。从Qt 5开始,你可以使用C++11的lambda表达式作为槽函数,这样可以使你的代码更加简洁,尤其是当你想要对信号进行一些简单的处理时,而不想去定义一个

1. 定义全局常量 全局常量可以在一个头文件中使用 const 关键字或 #define 预处理器来定义: // constants.h #ifndef CONSTANTS_H #define CO