首页 > 其他分享 >在QT中如何给控件覆盖上半透明的蒙层(类似禁用功能)

在QT中如何给控件覆盖上半透明的蒙层(类似禁用功能)

时间:2024-07-03 23:30:06浏览次数:33  
标签:设置 控件 QT targetWidget overlayWidget 蒙层 QWidget 半透明

要在Qt中覆盖一个控件(如QWidget或其子类)以显示一个半透明的蒙层,你可以创建一个新的QWidget实例,设置其背景为半透明,并使其大小和位置与目标控件相匹配。以下是如何实现这一功能的步骤:

  1. 创建半透明的QWidget
    创建一个新的QWidget实例,并设置其样式表(stylesheet)以使其背景半透明。

  2. 设置大小和位置
    确保半透明QWidget的大小和位置与目标控件相匹配。这可以通过设置其几何属性(setGeometry)或使用布局管理器来实现。

  3. 确保鼠标事件穿透
    如果你希望鼠标事件能够穿透这个半透明的蒙层并传递给下面的控件,可以设置属性Qt::WA_TransparentForMouseEvents

  4. 添加到父控件
    将半透明的QWidget添加到目标控件的父控件中,以确保它在正确的位置显示。

以下是一个简单的示例代码:

#include <QWidget>  
#include <QVBoxLayout>  
  
// 假设你有一个目标控件 targetWidget  
QWidget *targetWidget = new QWidget; // 或者使用已经存在的QWidget指针  
  
// 创建一个半透明的QWidget作为蒙层  
QWidget *overlayWidget = new QWidget(targetWidget->parentWidget()); // 使用目标控件的父控件作为父控件  
overlayWidget->setAttribute(Qt::WA_TransparentForMouseEvents); // 设置鼠标事件穿透  
overlayWidget->setStyleSheet("background-color: rgba(128, 128, 128, 128);"); // 设置半透明背景  
overlayWidget->setGeometry(targetWidget->geometry()); // 设置与目标控件相同的几何位置  
  
// 如果目标控件的父控件使用了布局管理器,你也可以将overlayWidget添加到布局中  
// QVBoxLayout *layout = qobject_cast<QVBoxLayout*>(targetWidget->parentWidget()->layout());  
// if (layout) {  
//     layout->addWidget(overlayWidget);  
// }  
  
// 显示父控件(如果它还没有显示)  
targetWidget->parentWidget()->show();

请注意,如果目标控件的父控件使用了布局管理器,你可能需要调整布局或直接将半透明控件添加到布局中,以确保它在正确的位置显示。在上面的示例中,我注释掉了与布局相关的代码,因为直接设置几何位置通常更简单直接。但是,在复杂的界面中,使用布局管理器可能更为合适。

标签:设置,控件,QT,targetWidget,overlayWidget,蒙层,QWidget,半透明
From: https://blog.csdn.net/YuYao1110/article/details/140164664

相关文章

  • 在QT中的QGraphicsEffect详细说明
    QGraphicsEffect 是Qt框架中用于为图形项(如 QGraphicsItem、QGraphicsPixmapItem、QWidget 等)添加视觉效果的基类。通过使用 QGraphicsEffect,你可以改变图形项的外观,如添加模糊、阴影、颜色化、透明度等效果。以下是如何使用 QGraphicsEffect 的一些基本步骤:选择或......
  • 在QT中如何通过QConicalGradient设置渐变
    在Qt中,QConicalGradient类用于创建一个锥形渐变,这种渐变是从一个中心点向四周辐射的。你可以设置中心点、渐变角度以及这些角度上对应的颜色。以下是一个使用QConicalGradient设置渐变的示例代码:#include<QPainter>#include<QConicalGradient>#include<QWidget>......
  • 【实际应用-第七篇 物联网 mqtt模拟实现单向通信 】
    文章目录概要发布方(模拟设备)引入pom回调MqttCallback发布的方法订阅方(模拟服务器)引入pom回调MqttCallback订阅的方法测试结果实际应用概要两个springboot项目,一个作为发布方,一个作为订阅方,模拟设备向服务器发送mqtt请求上报消息,示例使用的是......
  • Qt Creator配置以及使用Git
    QtCreator配置以及使用Git引言一、QtCreator配置git二、QtCreator使用git2.1创建git仓库orgit项目导入Qt2.2配置远端,拉代码or上传代码2.3查看更改2.4更多细节可参考官方文档三、参考的博客以及文档引言QtCreator配置Git之后,可以看作是一个拥有图形用户......
  • Winform SynchronizationContext多线程更新画面控件
    SynchronizationContext在通讯中充当传输者的角色,实现功能就是一个线程和另外一个线程的通讯。需要注意的是,不是每个线程都附加SynchronizationContext这个对象,只有UI线程是一直拥有的。故获取SynchronizationContext也只能在UI线程上进行SynchronizationContextcontex......
  • qt windeployqt 打包qt程序
    1、windeployqt路径2、增加环境变量3、运行指令windeployqtexe绝对路径--qmldir工程的绝对路径【注意1】最好单独建立一个目录,将exe单独复制进去,因为windeployqt会将依赖的各种文件和库拷贝到exe所在的目录【注意2】--qmldir是一个可选参数,如果没有使用qml则可以不......
  • QTableWidget单元格设置控件居中以及背景颜色问题
    QTableWidget的单元格如果要显示其他控件,可以使用setCellWidget,但是控件没有居中,要想使控件居中,可以先创建一个QWidget对象,并设置布局器,然后将控件放到布局器中,并把这个QWidget对象放到单元格内,但是此时若要设置单元格的背景颜色,QTableWidget只能通过设置QTableWidgetItem的颜色来......
  • 使用qt 获取一张网络图片,并将这张图片显示在qml 上
    #include<QGuiApplication>#include<QQmlApplicationEngine>#include<QNetworkAccessManager>#include<QNetworkReply>#include<QUrl>#include<QImage>#include<QQuickImageProvider>classImageProvider:publicQQuickI......
  • Windows 下安装 Qt 教程
    1.下载安装包进入官网,会出现以下内容:其分别代表着:Name注释snapshots预览版,最新测试中的Qt库和开发工具onlineQt在线安装源official_releases正式发布版,相对稳定的Qt库和开发工具ministro迷你版,针对Android的版本learningQt的文档和示范视......
  • VSCode + Qt + QMake 开发编译环境搭建
    鉴于Qt官方IDE太过难用,VSCode+各种插件功能强大,遂采用VSCode来写Qt项目;本博客在Windows平台进行指导操作,Mac、Linux平台配置方式类似,学习其本质就可。前置准备VSCode,最新版本即可本地Qt环境,版本随意,本文主要针对较老版本使用Qmake构建系统的项目环境变量Qt环境变......