Qt学习笔记15:setWindowFlags和 setAttribute

2023-11-05


1. setWindowFlags(QT::WindowFlags)

setWindowFlags(QT::WindowFlags)主要设置一些窗口标志,平常开发中主要有两类需求:

  • 将某一子窗口设置为最顶层窗口。
    使用Qt::Tool 属性:setWindowFlags(Qt::Tool)
  • 重新定义窗口的属性,比如:取掉最大、最小、关闭等按钮,或者直接使用无边框窗口

注意:很多人可能使用第2类设置属性,但是总是不成功,其原因是如果子窗口有父亲,则窗口属性也被父亲控制,这时候的这个子窗口其实并不是严格意义上的完整窗口,相当于父窗口的一个部件,所以这时候设置自定义窗口属性,有两种方法:(1)设置父亲窗口属性,(2)给子窗口设置属性的时候加上 Qt::Window 或 Qt::Dialog等指定该子窗口为完整窗口,(Qt::DIalog | Qt::CustomizeWindowHint )

以下是窗口具体属性介绍:

  • Qt::Widget : QWidget构造函数的默认值,如新的窗口部件没有父窗口部件,则它是一个独立的窗口,否则就是一个子窗口部件。
  • Qt::Window : 无论是否有父窗口部件,新窗口部件都是一个窗口,通常有一个窗口边框和一个标题栏。
  • Qt::Dialog : 新窗口部件是一个对话框,指示部件是应该作为对话框窗口(即标题栏中通常没有最大化或最小化按钮)。这是QDialog的默认类型。如果要将其用作模态对话框,则应从另一个窗口启动它,或者如果有父窗口,则与QWidget::windowModality属性一起使用。如果将其设置为模态,则对话框将阻止应用程序中的其他顶级窗口获取任何输入。我们将具有父级的顶级窗口称为辅助窗口。
  • Qt::Sheet : 新窗口部件是一个Macintosh表单。
  • Qt::Drawer : 新窗口部件是一个Macintosh抽屉。
  • Qt::Popup : 新窗口部件是一个弹出式顶层窗口。
  • Qt::Tool : 新窗口部件是一个工具窗口,它通常是一个用于显示工具按钮的小窗
    口,如果一个工具窗口有父窗口部件,则它将显示在父窗口部件的上面,否则,将相当于使用了Qt::WindowStaysOnTopHint展示。
  • Qt::Tooltip : 新窗口部件是一个提示窗口,没有标题栏和窗口边框.
  • Qt::SplashScreen : 新窗口部件是一个欢迎窗口,它是QSplashScreen构造函数的默认值。
  • Qt::Desktop : 新窗口部件是桌面,它是QDesktopWidget构造函数的默认值。
  • Qt::SubWindow : 新窗口部件是一个子窗口,而无论该窗口部件是否有父窗口部件。
  • Qt::X11BypassWindowManagerHint : 完全忽视窗口管理器,它的作用是产生一个根本不被管理器的无窗口边框的窗口,此时,用户无法使用键盘进行输入,除非手动调用QWidget::ActivateWindow()函数。
  • Qt::FramelessWindowHint : 产生一个无窗口边框的窗口,此时用户无法移动该窗口和改变它的大小。
  • Qt::CustomizeWindowHint : 关闭默认的窗口标题提示。
    this->setWindowModality(Qt::WindowModal); //设置窗体为模态

2. setAttribute(Qt::WA_DeleteOnClose,true)

setAttribute(Qt::WA_DeleteOnClose,true)用于设置各种窗口小部件(widget)的属性,平时开发一般两种需求:

  • 关闭窗口时删掉实例化的类
    使用Qt::WA_DeleteOnClose 属性:setAttribute(Qt::WA_DeleteOnClose,true)
  • QT中窗口部件背景透明化
    Qt::WA_NoSystemBackground, Qt::WA_TranslucentBackground:

注意:窗口透明还有很多方法,以下列举几个

  1. Qt::WA_DeleteOnClose
    一个QWidget在close()时,对象并没有被删除,可以设置this->setAttribute(Qt::WA_DeleteOnClose,true);使此对象被
    若下次再调用show()就会段错误。不过这种方法有个弊端:因为这个指针是没有办法自动设为NULL,会变为野指针。

  2. Qt::WA_QuitOnClose属性:表示当拥有该属性的最后一个部件接受到QCloseEvent事件时,让Qt终止应用程序。默认情况 下,所有Qt::Window类型的部件都具有该属性。

  3. Qt::WA_NoSystemBackground, Qt::WA_TranslucentBackground:
    setAutoFillBackground(false); //这个不设置的话就背景变黑
    setWindowFlags(Qt::FramelessWindowHint);
    setAttribute(Qt::WA_TranslucentBackground,true); 表示窗口小部件应具有半透明背景,即窗口小部件的任何非不透明区域将 是半透明的(因为窗口小部件将具有Alpha通道。)设置此标志会导致设置WA_NoSystemBackground。在Windows上,窗口 小部件还需要设置Qt :: FramelessWindowHint窗口标志。该标志由小部件的作者设置或清除。

以下为其他几种属性
Qt::WA_PaintOutsidePaintEvent
一般QPainter只能在PaintEvent事件中使用,使用此flag可以使在paintEvent 之外的函数中使用。
Qt::WA_AcceptDrops 允许将拖放操作中的数据拖放到窗口小部件上(请参阅QWidget :: setAcceptDrops())。
Qt::WA_AlwaysShowToolTips 为非活动窗口启用工具提示。
Qt::WA_DeleteOnClose 当窗口小部件接受close事件时,Qt删除此窗口小部件(请参阅QWidget :: closeEvent())。
Qt::WA_Disabled 表示窗口小部件已禁用,即它不接收任何鼠标或键盘事件。还有一个getter函数QWidget :: isEnabled()。这由Qt内核设置/清除。
Qt::WA_DontShowOnScreen 表示窗口小部件已隐藏或不是可查看桌面的一部分。
Qt::WA_MouseTracking 表示窗口小部件已启用鼠标跟踪。请参阅QWidget :: mouseTracking。
Qt::WA_NoMouseReplay 用于弹出窗口小部件(popup)。指示弹出窗口小部件关闭时不应重播最近的鼠标按下事件。该标志由小部件的作者设置,并在每次小部件接收到新的鼠标事件时由Qt内核清除。
Qt::WA_OpaquePaintEvent,paintEvent已经画好的不会被擦除,但是发现此时界面的颜色无法设置,只有一种颜色

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt学习笔记15:setWindowFlags和 setAttribute 的相关文章

  • 使用 Qt 的网络服务

    我正在寻找使用 Qt 服务器端 实现 Web 服务的代码 如果您有任何信息 我将不胜感激 Regards 您可以使用libqxt http libqxt bitbucket org doc 0 6 qxtweb html实现服务器端Web服
  • 选择合适的IDE

    您会推荐使用以下哪种 IDE 语言来在 Windows 下开发涉及识别手势并与操作系统交互的项目 我将使用 OpenCV 库来执行图像处理任务 之后 我将使用 win32 API 或 NET 框架与操作系统交互 具体取决于您建议的工具 性能
  • QChart 对大数据集无响应

    我的这段代码适用于高达 1000 的数据大小 现在我用 65536 个点对其进行了测试 series new QLineSeries QList
  • Qt 创建者 4.8.4。 Windows 7 - 64 位安装

    我在 QT 方面遇到了一些困难 我需要在学校使用它来完成一些 GUI 应用程序 我最近完成了以下步骤 1 mingw get inst 20120426 exefrom 来源锻造 http sourceforge net projects
  • 如何将flex和bison与Qt项目集成?

    我正在 git 源代码控制下使用 Qt4 制作 GUI 程序 Github页面 https github com vinayak garg dic sim 项目的一小部分需要扫描和解析 所以我想在项目中使用flex和bison 我能想到3种
  • Android 版 Qt 和 BoringSSL

    我正在开发一个基于 Qt 的 Android 应用程序 它使用 QSslSocket 下载数据 由于 Android 从 OpenSSL 转向 BoringSSL 因为依赖 OpenSSL 库的 Marshmallow Qt 程序在 And
  • QFileDialog 作为 TableView 的编辑器:如何获取结果?

    我正在使用一个QFileDialog作为某些专栏的编辑QTableView 这基本上有效 对一些焦点问题取模 请参阅here https stackoverflow com questions 22854242 qfiledialog as
  • 如何使用 qt 库中的调试符号为 qt 5.5 创建开发 shell

    我有一个开发外壳buildInputs条目包括qt55 qtbase 这很好用 今天 我在 qt 库中发生了段错误 我想要带有调试符号的 qt 库 我看了一下nixpkgs pkgs development libraries qt 5 5
  • QT C++ QRegularExpression 多个匹配

    我想使用正则表达式从 QString html 中提取信息 我明确想使用正则表达式 无解析器解决方案 和类Q正则表达式 http qt project org doc qt 5 0 qtcore qregularexpression htm
  • MSVC C4100:“应用程序”:未引用的形式参数警告

    使用 MSVC 编译时 以下代码会生成 C4100 警告 这怎么可能 显然引用了 应用程序 class ApplicationInfo public QObject Q OBJECT public static void initializ
  • 运行最新版本时没有“最新”消息?

    我正在尝试使用Sparkle https sparkle project org与 Qt Go 的绑定 https github com therecipe qt app 闪光 m import
  • qt 如何知道按钮被点击?

    我正在尝试编写一个程序 用声音进行一些操作 我的问题是我有 3 个播放按钮和 3 个标签 我希望无论我单击 播放 按钮 都应该播放按钮附近标签中名称的声音 我有一个没有任何参数的播放插槽 那么 如何分别连接到每个播放按钮和每个标签呢 实际上
  • 在 QtCreator 中调试时如何查看 qDebug 消息

    我正在从 Eclipse CDT 带有 Qt 集成插件 过渡到 QtCreator 2 0 但仍有一件事困扰着我 QtCreator 当我在 QtCreator 中调试时 我在Application output tab直到我停止正在调试的
  • 当给定 100k 项时,QListView 需要很长时间才能更新

    我在读取文件时遇到问题 具体是我想制作一本小字典 在我需要阅读的文件中有这样的内容 a Ph P6 a snsr CA a b c fb Dj a b c book i BS A except B gate oOPa y a font kQ
  • Qt - QProcess 不工作

    我尝试启动 Internet Explorer 所以我使用下面的代码 QProcess process new QProcess this QString temp C Program Files Internet Explorer iex
  • 更改 Qt 中的语言环境

    我尝试使用 QLocale 和 setDefault 函数更改区域设置 但似乎不起作用 以下是使用 C 本地化库和 QLocale 更改语言环境的示例 对于 C 本地化库 它似乎可以工作 但对于 QLocale setDefault 函数调
  • 仅当从 Qt 连接时网页返回 HTTP 406 错误

    我有一个测试页面设置http mlecturedownload com test qt php http mlecturedownload com test qt php有以下代码
  • Qmake 不支持源目录下的构建目录

    我创建了一个可以在 OS X 上编译和运行的应用程序 我现在想开始让它在 Windows 上运行 首先 我将项目复制到 Windows 机器上并尝试编译 但收到此错误 警告 Qmake不支持源目录下的构建目录 有任何想法吗 将影子构建目录设
  • PyQt:使用 alpha 通道创建 QPixmap,而不是预乘颜色通道

    我想创建一个 QPixmap 来使用 QPainter 进行绘制 QPixmap 应支持透明度 而不使用预乘颜色通道 目前 我通过创建具有所需尺寸的 QPixmap 并用每个通道 包括 alpha 设置为零的 QColor 填充它来实现此目
  • 如何改善 Qt5 程序的启动时间?

    我最近切换到 Qt5 我注意到与 Qt4 相比 初始化 QApplication 花费的时间明显更长 大约几分钟 仔细一看 程序似乎把时间花在了这里 Qt5Guid dll QGlobalStatic

随机推荐

  • 关于mybatis的resultMap映射VO类

    今天的模块需要用到多表联查 将查到的结果放到一个新的实体类中 而这几张表的主键我需要用到 难过的是多个表的主键名都是 id 这就导致新的实体类中多个表的主键字段名无法区分 最后再查询语句中加入别名以区分多个表的主键 本以为这就可以了 但是在
  • Java 通配符泛型例子

    请看下面的代码 其中会发生错误的代码已经注释掉 并且写明了错误类型 总体来说 泛型通配符就是为了支持多态时父子类 接口扩展类之间的相互转换而生 package test import java util ArrayList import j
  • seaborn学习笔记(三):直方图、条形图、条带图

    html font family sans serif ms text size adjust 100 webkit text size adjust 100 body margin 0 article aside details figc
  • [carla]把carla世界坐标系 转换为 俯视地图像素坐标系

    在下面这篇参考博客中介绍了如何手动获取从carla世界坐标系到俯视地图像素坐标系的旋转平移矩阵 我也是采用了一样的思路和代码 这里把实现的过程以及最后所有地图的变换矩阵记录如下 参考博客 carla真实世界坐标系与全局俯视地图像素坐标系变换
  • MetaFormer论文翻译

    MetaFormer A Unified Meta Framework for Fine Grained Recognition 摘要 细粒度视觉分类 FGVC 是一项需要识别属于超类别的多个从属类别的对象的任务 最近最先进的方法通常设计复
  • 七年程序员职业规划:北京、上海、硅谷工作经历分享

    前言 很多年前 刚刚从大学毕业的时候 很多公司来校招 其中最烂俗的一个面试问题是 你希望你之后三到五年的发展是什么 我当时的标准回答是 原话 成为在某一方面能够独当一面的技术专家 后来经历了几家不同的公司 换了不同的方向 才知道这个真是一个
  • SpringBoot为什么没有web.xml了

    SpringBoot为什么没有web xml了 今天我们来放松下心情 不聊分布式 云原生 来聊一聊初学者接触的最多的 java web 基础 几乎所有人都是从 servlet jsp filter 开始编写自己的第一个 hello worl
  • IDEA中快速查看maven依赖树关系, 以及快速解决jar包冲突

    安装Maven Helper 插件 打开pom xml 切换到Dependency Analyzer 即可看见jar包的传递依赖关系 比如 spring boot starter websocket 中已经包含了spring boot st
  • HW5300V3-ISCSI存储运维,看这一篇就够了04-创建启动器

    操作步骤 1 选择 资源分配 gt 主机 gt 启动器 单击 创建 2 系统弹出 创建启动器 对话框 在 类型 中选择启动器类型 为主机添加启动器 操作步骤 1 选择 资源分配 gt 主机 gt 启动器 根据业务需求 选择一个或多个待添加给
  • Golang 同步方式

    目录 1 channel 2 Sync Mutex 3 Sync waitGroup 4 Sync Once 5 Sync context 6 Sync pool 7 atomic包 针对变量进行操作 Sync包简述 收集了一些Golang
  • 快速排序实现(递归与非递归)

    快速排序 前言 快排递归 快速排序 挖坑法 快速排序 Hoare法 快速排序 前后指针法 快速排序的优化 三数取中 小区间优化 快排非递归 前言 首先我们来了解一下什么是快速排序 快速排序是交换排序中的其中一个 是一种比较高效的排序方法 时
  • Splunk 会议回顾: 大数据的关键是机器学习

    Splunk的用户大会已经接近尾声 三天时间的会议里 共进行了160多个主题研讨 涵盖了从安全 运营到商业智能 甚至包括物联网 会议中一遍又一遍出现相同的中心主题 大数据的关键是机器学习 存储不再是一个问题 从运行Hadoop兼容节点的专用
  • rdkafka是否支持基于jks的ssl配置

    不可以 https github com edenhill librdkafka wiki Using SSL with librdkafka 目前rdkafa的支持配置如下链接 https github com edenhill libr
  • selenium 使用chrome时与chromedriver版本不匹配的问题

    这几天想试一下 selenium 但安装配置好之后 总是会报一个奇怪的错误 具体错误信息如下 selenium common exceptions WebDriverException Message unknown error Runti
  • 剑指Offer:(数组)数组中出现次数超过一半的数字

    数组中出现次数超过一半的数字 一 题目 数组中有一个数字出现的次数超过数组长度的一半 请找出这个数字 例如输入一个长度为9的数组 1 2 3 2 2 2 5 4 2 由于数字2在数组中出现了5次 超过数组长度的一半 因此输出2 如果不存在则
  • Destination Host Unreachable 解决方法

    网上有很多种产生这样情况的原因 DNS设置等 我这里却是由于GATEWAY引起的 没改之前是192 168 0 1 导致一直无法ping 通DNS地址 如 ping 8 8 8 8 一直出现Destination Host Unreacha
  • word删除分节符后之前的格式乱了_分页符&分节符,你知道多少

    Word中 我们经常会遇到分页符和分节符 它们对文档排版 打印 页边距调整 批量调整文档格式等非常重要 分隔符包括 分页符和分节符 分页符 是分页的一种符号 实则就是一条虚线 一般是插在每页的后面 它是位于上一页结束以及下一页开始的位置 分
  • VUE-模板

    Vue js 使用了基于 HTML 的模板语法 允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据 所有 Vue js 的模板都是合法的 HTML 所以能被遵循规范的浏览器和 HTML 解析器解析 在底层的实现上 Vue 将模板编
  • [910]Visual Studio2019安装及使用

    一 下载安装包 下载地址1 https visualstudio microsoft com zh hans rr https www baidu com link url b1goBv9 kKk8djltygQxPnrrNv9bLT0nH
  • Qt学习笔记15:setWindowFlags和 setAttribute

    文章目录 1 setWindowFlags QT WindowFlags 2 setAttribute Qt WA DeleteOnClose true 1 setWindowFlags QT WindowFlags setWindowFl