Qt --- Qt窗口

news2024/9/28 14:07:50

一、前言

前面学习的所有代码,都是基于QWidget控件。QWidget更多的是作为别的窗口的一个部分。

Qt中的QMainWindow就是窗口的完全体

Menu Bar菜单栏

Tool Bar Area 工具栏,类似于菜单栏,工具栏本质上就是把菜单中的一些比较常用的选项,直接放到工具栏里了,直接点工具栏中的按钮就能快速生效。

Dock Widget Area 铆接部件,就是一个子窗口。

Central Widget 中央控件,窗口最核心的部分。

Status Bar 状态栏。

二、菜单栏的使用

一个主窗口最多只有一个菜单栏,工具栏本质上就是菜单中的一些选项的快捷方式

菜单栏(QMenuBar) -》菜单(QMenu) -》菜单项(QAction)

图形化界面的创建

代码创建

如何让我们的菜单项有反应,被点击的时候会触发一个信号,triggered信号触发。

1、菜单添加快捷键

给菜单和菜单像设置快捷键,设置好的快捷键就可以搭配alt来使用了。

通过给文本中添加&F这样的操作,就是添加了快捷键alt+F。

代码:

给QAction添加快捷键

代码: 

2、添加子菜单:

菜单栏 -》菜单 -》子菜单 -》子菜单,QMenu也提供了addMenu,通过这个操作给某个菜单添加子菜单。

代码:

添加分割线和添加图标

菜单里菜单项特别多,就可以通过分割线进行分组

QMenu中提供了addSeparator这样的函数。来添加分割线

代码:

添加图标:

代码:qrc,用到QIcon类。

如果给QMenu设置图标,当前QMenu是长在QMenuBar上的,此时文本就不显示。图标覆盖了文本,QMenu是子菜单,图标和文本是都能显示的。

QMenuBar创建方式的讨论。

之前程序自己已经创建好了一个QMenuBar当前设置新的QMenuBar进来的时候,就会导致旧的QMenuBar脱离了Qt的对象树了,意味着后续就无法对这个对象进行释放了。

上述程序如果窗口关闭,对象树释放,此时进程也就节数了,进程结束,自然所有内存都回收给系统了,上述内存泄露也不会造成影响。但是如果这样的代码时出现在一个多窗口的程序中。如果涉及到窗口的频繁跳转切换,上述内存泄露就会更严重一些,但是实际上由于现在的计算机内存都比较充裕,上述内存泄露都还好,当然即使这样,我们也希望代码要规范一些。

如果QMenuBar已经存在,直接获取并返回。

如果QMenuBar不存在,就先创建一个新的,再返回。如果获取到已经存在的QMenuBar,这里的设置就是自己替换自己,还是自己,仍然在对象树上。

工作中可能会参与一些嵌入式的开发,嵌入式设备具有的硬件资源就比较紧张了。

三、QToolBar的使用

工具栏就是应用程序中集成各种功能实现快捷键使用的一个区域,可以有多个也可以没忽悠。

Qt中使用QToolBar表示工具栏对象。工具栏往往也可以手动移动位置。

代码:

之前设置的文字不会被删除,会变成一个ToolTip,另外也可以手动设置这里的toolTip

工具栏往往也是和菜单栏搭配使用的。工具栏中的QAction也可以出现在菜单中

如果一个QAction既是QMenu的子元素,又是QToolBar的子元素释放的时候,不会重复delete。

创建多个工具栏

代码:

设置工具栏出现的初始位置:

允许提放到哪些边缘:setAllowedAreas方法

设置不允许浮动

设置不允许移动

四、QStatusBar的使用

它是一个状态栏

代码:

给状态栏中添加子控件

五、QDockWidget的基本使用

浮动窗口 =》子窗口。Qt中使用QDockWidget来实现

六、Qt中的对话框

打开某些网站,不经意间就会弹出各种奇奇怪怪的窗口。对话框往往用户和用户之间进行短平快的操作。Qt中使用QDialog类表示对话框。针对一个已有的项目,也可以创建一些类,继承自QDia-log,实现咱们自定义的对话框。

Qt内置的对话框有:QFiledialog,QColorDialog,QFontDialog,QInputDialog和QMessageBox对话框。总体来说,基于QDialog作为父类创建出来的程序窗口和之前通过QWidget创建出来的非常相似。

 实际开发中,更多的情况,往往不是直接在创建项目的时候继承自QDialog,而是在代码中,创建额外的类,让额外的类继承自QDialog,主窗口,一般不会作为一个对话框,主窗口可以再产生一些其他的对话框。

代码:主窗口中,点击按钮弹出一个对话框。  

QDialog其实也是QWidget的一个子类,QWidget的各种属性方法,QDialog也能使用。

不同于界面上的其他控件,此处QDialog每次按下按钮,就会创建一个新的QDialog对象并进行显示。一个程序运行过程中,可以无数次点击这个按钮,进一步就产生出无数个这样的对象了=》内存泄露。就怕你的这一个对象占用内存很多呢,你的机器本身剩余的内存很少呢。正确的做法,应该是让用户点击对话框关闭按钮的时候才进行delete操作。

要想自定义对话框,就需要继承自QDialog创建类。

1)纯代码的方式来自定义对话框

2)通过图形化来自定义对话框

关键操作是创建一个ui文件

   

model 属性,是一个bool值,模态/非模态。

模态:弹出对话框的时候,此时用户无法操作父窗口,必须得完成对话框内部出的操作,关闭对话框之后。

非模态:弹出对话框的时候,用户可以操作父窗口。前面写的几个代码,都是非模态对话框

把show改成exec就可以改编成模态对话框。

QMessageBox的使用

QMessageBox用来显示一个消息给用户,并且让用户进行一个简单的选择。

代码:

添加自定义按钮

快速创建QMessageBox对话框

QColorDialog的使用

内置了调色板的功能

Qt中的QColorDialog的功能就是内置了调色板,效果就和上述的调色板相似。

getColor这个函数就能够弹出一个模态对话框,用户选择颜色之后,点击确定,对话框关闭,getColor返回的值就是用户选择的颜色值。它是一个静态函数,不必创建对话框对象,就可以直接使用。

代码:

通过ARGB来展示的。

alpha就是不透明度(opacity)

使用 0 - 1这样的小数表示RGB的值,1就对应到整数的255,0就对应到整数的0。

QFileDialog的使用

通过QFileDialog可以选择一个文件,能够获取到这个文件的路径,打开文件/保存文件

 代码:

此处的打开/保存这里的功能都是需要额外去实现的。并不是说直接一按保存就真的保存了。Qt针对文件的操作。

QFontDialog的使用

字体对话框类

当用户再这里设置好了属性并且点击ok的是函数就会返回一个QFont对象。

把用户选择的字体,设置到按钮上

QInputDialog的使用

输入对话框,请用户输入一个具体的数据,可以是整数,可以是浮点数,还可以是字符串,QInputDialog提供了几个静态函数getDouble,getInt,getItem

代码:

小结

Qt窗口程序

1、菜单栏(QMenuBar) =》 菜单(QMenu) =》 菜单项(QAction)

2、工具栏(QToolBar) =》菜单项(QAction)

3、子窗口(QDockWidget)=》QWidget =》放置其他的控件

4、状态栏(QStatusBar)=》QWidget

5、对话框(QDialog)=》自己手动继承的方式,针对QDialog进行扩展。

QMessageBox、QFileDialog、QColorDialog、QFontDialog、QInputDialog。

得到了更完整的应用程序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2173737.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

活动展览棚:灵活多变的展览解决方案—轻空间

在快速变化的市场环境中,活动展览棚作为一种创新的展示空间,正受到越来越多企业和组织的青睐。无论是展览、活动、还是市场推广,活动展览棚都能提供高效、灵活的解决方案,为品牌传播和产品展示带来全新体验。 便捷的搭建与拆卸 活…

C. Cards Partition 【Codeforces Round 975 (Div. 2)】

C. Cards Partition 思路&#xff1a; 可以O(n)直接判断&#xff0c;牌组从大到小依次遍历即可。 不要用二分答案&#xff0c;因为答案不一定是单调的 代码: #include <bits/stdc.h> #define endl \n #define int long long #define pb push_back #define pii pair<…

Angular与Vue的全方位对比分析

一、框架概述 Angular Angular是由Google开发和维护的一款开源JavaScript框架。它采用TypeScript编写&#xff0c;具有一套完整的开发工具和规范。Angular遵循MVC&#xff08;Model - View - Controller&#xff09;或更确切地说是MVVM&#xff08;Model - View - ViewModel&a…

【Python】数据可视化之分布图

分布图主要用来展示某些现象或数据在地理空间、时间或其他维度上的分布情况。它可以清晰地反映出数据的空间位置、数量、密度等特征&#xff0c;帮助人们更好地理解数据的内在规律和相互关系。 目录 单变量分布 变量关系组图 双变量关系 核密度估计 山脊分布图 单变量分布…

超全面的线程编程实战指南

第一部分&#xff1a;线程基本概念 一、线程简介 线程是操作系统能够进行运算调度的最小单位&#xff0c;它是一个进程内的独立控制流。线程之间共享同一进程的资源&#xff0c;如内存空间和其他系统资源。 二、线程的优势 效率高&#xff1a;由于线程共享相同的地址空间&a…

用Python+flask+mysql等开发的Excel数据资产落地工具

话不多说 1)Excel文件上传,列表预览 2)选中要导入结构及数据的Excel文件 约束说明: 2.1)Excel文件的第一行约定为表头名称 2.2)系统自动识别字段列名及数据类型,目前不支持合并表头 3)Excel建表导入数据成功后,可在表源列表中预览查看 4)对数据表源可进行透视图设计管理,可对…

Vue-Bag-Admin 采用漂亮的 Naive UI 构建的开源中后台系统,基于 Vue3 / Vite / TypeScript 等最新的前端技术栈

这是一款完成度很高、实用性很强的 admin 前端框架&#xff0c;颜值不错&#xff0c;推荐给大家。 Vue-Bag-Admin 在官网上也直接称为 Bag-Admin&#xff0c;这是一款专门为企业项目搭建中后台管理平台的前端框架&#xff0c;基于目前最新的前端技术栈 Vue3、Vite、TypeScript…

双十一儿童耳勺哪款好?双十一儿童专用掏耳神器推荐!

近期收到很多后台私信问儿童应该选择哪款耳勺&#xff0c;现在市面上掏耳神器众多&#xff0c;但要选择一个能适合儿童专用的产品要仔细斟酌。 如果挑选到不符合或者劣质的儿童掏耳工具&#xff0c;不仅清洁不干净不说&#xff0c;还会有损害儿童肌肤的风险&#xff01;那么专为…

Llama 3.2 90B刚开源就被Molmo-72B全面击败!

Meta此次发布的Llama 3.2一个新特性是视觉模型&#xff0c;包括11B和90B&#xff0c;作为首批支持视觉任务的Llama模型&#xff0c;但是allenai开源的多模态Molmo-72B&#xff0c;在视觉评测上全面击败Llama 3.2 90B。 两个新发布的开源LLM之间的基准测试比较&#xff1a;Molm…

leetcode163.缺失的区间,模拟

leetcode163.缺失的区间 给定一个排序的整数数组 nums &#xff0c;其中元素的范围在 闭区间 [lower, upper] 当中&#xff0c;返回不包含在数组中的缺失区间。 示例&#xff1a; 输入: nums [0, 1, 3, 50, 75], lower 0 和 upper 99, 输出: [“2”, “4->49”, “51-&…

OpenSource - 开源WAF_SamWaf

文章目录 PreSafeLine VS SamWaf开发初衷软件介绍架构界面主要功能 使用说明下载最新版本快速启动WindowsLinuxDocker 启动访问升级指南自动升级手动升级 在线文档 代码相关代码托管介绍和编译已测试支持的平台测试效果 安全策略问题反馈许可证书贡献代码 Pre Nginx - 集成Mod…

关系模型与关系代数——数据库原理 总结2

2.1 关系模型 关系数据结构 关系模型的数据结构是二维表&#xff0c;亦称为关系。关系数据库是表的集合&#xff0c;即关系的集合。表是一个实体集&#xff0c;一行就是一个实体&#xff0c;它由有关联的若干属性的值所构成。 关系模型的相关概念 列就是数据项 或 字段 或 属…

C++那些你不得不知道的(2)

C那些你不得不知道的&#xff08;2&#xff09; 1、缺省参数在使用的遍历 &#xff08;1&#xff09;以下是实现顺序表的初始化和检查容量空间的方式&#xff1a; void Init(list* ps) {ps->arr NULL;ps->Capacity ps->size 0; }void CheckCapacity(list* ps) {…

量化系统QTYX使用攻略|“自动交易”篇——ETF量化框架,集成“策略回测仓位风控下单”(更新v2.9.2)...

QTYX系统简介 股票量化交易系统QTYX是一个即可以用于学习&#xff0c;也可以用于实战炒股分析的系统。 分享QTYX系统目的是提供给大家一个搭建量化系统的模版&#xff0c;最终帮助大家搭建属于自己的系统。因此我们提供源码&#xff0c;可以根据自己的风格二次开发。 关于QTYX的…

ABAP版本管理

在开发中ABAP管理有查看&#xff0c;生成&#xff0c;比对&#xff0c;远程比对&#xff0c;回滚&#xff0c;删除等等操作。日常中往往会遇到需要回滚到上一版本的代码&#xff0c;但是ABAP不像git代码管理那么专业&#xff0c;但是也是可以回滚代码的。在此记录一下操作过程。…

大模型时代,2024的传统程序员还需要写代码吗?需要学习大模型吗?

一&#xff0e;引言 随着大模型&#xff08;如GPT等&#xff09;的迅猛发展&#xff0c;软件开发领域中我们的开发方式也在悄然发生变化。当然&#xff0c;我作为一名传统的Java后端开发工程师&#xff0c;在职业生涯的初期主要专注于使用多种数据结构以及算法编写业务代码。 …

所有测试人,下半年的新方向(大模型),赢麻了!!!

现在做测试&#xff0c;真的挺累的。 现在测试越来越难做&#xff0c;晋升困难&#xff0c;工资迟迟不涨……公司裁员&#xff0c;测试首当其冲&#xff01;&#xff01; 做测试几年了&#xff0c;还没升职&#xff0c;就先到了“职业天花板”。 想凭工作几年积累的经验&…

面向未来的设计:推动企业架构创新的关键——The Open Group 2024生态系统架构与可持续发展年度大会

在当今快速变化的数字时代&#xff0c;企业的可持续发展和创新能力比以往任何时候都更为重要。The Open Group 2024生态系统架构可持续发展年度大会&#xff0c;为全球技术和数字化转型专业人士提供了一个无与伦比的机会&#xff0c;以探索先进的企业架构与建模解决方案&#x…

SQLite3模块使用详解

目录 一、引言 1.1 SQLite3 简介 1.2 Python sqlite3 模块 二、连接数据库 2.1 导入 sqlite3 模块 2.2 连接数据库 2.3 创建游标对象 三、执行 SQL 语句 3.1 创建表 3.2 插入数据 3.3 查询数据 3.4 更新数据 3.5 删除数据 四、处理查询结果 4.1 fetchall() 4.2…

FollowYourPose - 生成可编辑、姿态可控制的人物视频

文章目录 关于 FollowYourPose摘要&#x1f37b;&#x1f37b;&#x1f37b;设置环境&#x1f483;&#x1f483;&#x1f483;培训&#x1f57a;&#x1f57a;&#x1f57a;推理&#x1f483;&#x1f483;&#x1f483; 本地 Gradio 演示&#x1f57a;&#x1f57a;&#x1f…