Qt --- Qt窗口

news/2024/9/28 12:48:28 标签: qt, 开发语言

一、前言

前面学习的所有代码,都是基于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.niftyadmin.cn/n/5681134.html

相关文章

Midjourney 使用教程——入门篇

目录标题 一、前提二、Midjourney 使用文档三、如何注册使用Midjourney四、结合GPT快速生成Midjourney 构图指令五、其他 一、前提 先连接国外代理服务器。没有的可以退下了。 二、Midjourney 使用文档 Discord 快速入门 注意:如图所示,需要10美刀一…

另外知识与网络总结

一、重谈NAT(工作在网络层) 为什么会有NAT 为了解决ipv4地址太少问题,到了公网的末端就会有运营商路由器来构建私网,在不同私网中私有IP可以重复,这就可以缓解IP地址太少问题,但是这就导致私有IP是重复的…

JMeter源码解析之JMeter命令行新增命令

JMeter源码解析之JMeter命令行新增命令 需求描述 需要新增一条命令,能够在JMeter命令行中能够展示输入对应的JMeter命令,能够展示对应的命令信息 查看命令效果如下: apache-jmeter-5.1\bin>jmeter --? Copyright © 1999-2024 The …

洞悉go.dev

本篇内容是根据2020年1月份Grokking Go.dev音频录制内容的整理与翻译, Carmen、Mat 和 Jon 与 Steve Francia 和 Julie Qiu 一起讨论了新的 Go.dev 网站。它背后的动机是什么?它使用了什么技术来构建它?他们如何努力使包发现变得更好?有哪些…

什么?你想通过网络安全月入千万?看看AI的回答(包含注释版)

大家好,我是Dest1ny! 我今天给大家整个活,手把手教你如何赚到1000万! 哈哈哈哈,我发誓是最后一次整活?(不是) 要模拟如何赚到1000万,我可以通过一个假设的场景为你描绘出一个可能的过程。在这…

Sharp.js:简单而又实用的图像处理库

前言 在现代Web开发中,图像处理是一个不可或缺的部分。 前端开发者经常需要处理图像,以确保它们在不同的设备和分辨率上都能保持良好的显示效果。 sharp.js是一个高性能的Node.js模块,它利用了libvips库,提供了快速且高效的图像…

小程序用户截屏事件

原生小程序: wx.setScreenBrightness({value: 0.5 }); 参数值: value屏幕亮度值,范围 0~1,0 最暗,1 最亮 uniapp: uni.setScreenBrightness({value: 0.5 }); 参数值: value屏幕亮度值&a…

【电商搜索】现代工业级电商搜索技术-Ha3搜索引擎平台简介

【电商搜索】现代工业级电商搜索技术-Ha3搜索引擎平台简介 — 初稿V1.0 Ha3搜索引擎平台详细介绍 在当今的互联网时代,搜索引擎扮演着至关重要的角色,尤其是在电子商务领域。Ha3搜索引擎平台是由阿里巴巴搜索团队开发的一个先进的搜索引擎&#xff0c…