Qt之窗口

目录

Qt窗口简介:

菜单栏 

⼯具栏

状态栏

浮动窗⼝ 

对话框 

Qt内置对话框

1.消息对话框QMessageBox 

2.颜⾊对话框QColorDialog 

3.⽂件对话框QFileDialog 

4.字体对话框QFontDialog 

5.输⼊对话框QInputDialog 

总结 

接下来的日子会顺顺利利,万事胜意,生活明朗-----------林辞忧

Qt窗口简介:

Qt窗⼝是通过QMainWindow类来实现的。 QMainWindow是⼀个为⽤⼾提供主窗⼝程序的类,继承⾃QWidget类,并且提供了⼀个预定义的 布局。QMainWindow包含⼀个菜单栏(menubar)、多个⼯具栏(toolbars)、多个浮动窗⼝(铆 接部件)(dockwidgets)、⼀个状态栏(statusbar)和⼀个中⼼部件(centralwidget)

菜单栏 

Qt 中的菜单栏是通过QMenuBar这个类来实现的。⼀个主窗⼝最多只有⼀个菜单栏。位于主窗⼝顶 部、主窗⼝标题栏下⾯。

菜单栏中包含菜单.菜单中包含菜单项.

代码实例:在窗⼝上创建⼀个菜单栏,在菜单栏中添加⼀些菜单,在某⼀个菜单中添加⼀些菜单项。

注意:此时新建项⽬时选择的基类 QMainwindow

 通过图形化界面的方式

通过代码的方式:

 

(1)给菜单设置快捷键 

设置好的快捷键需要搭配alt来进行使用

(2) 给菜单项设置快捷键

(3) 添加子菜单

 QMenuBar可以通过addMenu添加菜单的

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

(4) 添加分割线

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

QMenu中提供了addSeparator这样的函数

(5) 添加图标

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

(6) 关于QMenuBar创建方式的讨论

如果我们创建的项目,没有勾选自动生成ui文件时,此时上述代码是没有问题的

如果勾选了自动生成ui文件,上述代码就会引起内存泄露

在自动生成的ui文件中,Qt已经生成了一个QMenuBar了

这是当设置新的QMenuBar进来的时候,就会导致旧的QMenuBar脱离Qt的对象树了,意味着后续就无法对这个对象进行释放了

上述程序如果窗口关闭,对象树释放,此时进程就结束了,自然所有内存都回收给系统,上述内存泄露就不会造成影响

但是如果这样的代码 是出现在一个多窗口的程序中,如果涉及到窗口频繁跳转切换,就会导致内存泄露更严重一些

这是采用这样的写法,当QMenuBar已经存在,直接获取并返回;当QMenuBar不存在,就会创建一个新的再返回

如果是获取到已经存在的QMenuBar,这里的设置就是自己替换自己,即还是自己,仍然在对象树上

⼯具栏

⼯具栏是应⽤程序中集成各种功能实现快捷键使⽤的⼀个区域。可以有多个,也可以没有,工具栏可以手动移动位置

添加菜单栏,使用的是setMenuBar,菜单栏只能有一个,重复设置,新的替换旧的(set就包含"替换"的意思)

添加工具栏,使用的是addToolBar,工具栏可以有多个,重复设置,就会出现多个工具栏,不包含替换

(1)创建⼯具栏

这里一条条的就是工具栏,需要给工具栏添加菜单项QAction

QAction如果出现在工具栏上,就会出现图标覆盖文本这样的情况。而文本会以toolTip的方式存在,但鼠标悬停上去的时候,就会显示一段提示信息(toolTip),这里可以手动修改toolTip

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

这里的QAction既是QMenu的子元素,又是QToolBar的子元素,释放的时候也只会释放一次

(2)创建多个工具栏

(3) 设置停靠位置

⼯具栏停靠位置的设置有两种⽅式。⼀种是在创建⼯具栏的同时指定停靠的位置,另⼀种是通过 QToolBar类提供的setAllowedAreas()函数来设置。

⽅式⼀:创建⼯具栏的同时指定其停靠的位置

在创建⼯具栏的同时,也可以设置⼯具栏的位置,其默认位置是在窗⼝的最上⾯;如上述代码,默认 在最上⾯显⽰。⼯具栏允许停靠的区域由QToolBar类提供的allowAreas()函数决定,其中可以设置 的位置包括:

⽅式⼆:使⽤QToolBar类提供的setAllowedAreas()函数设置停靠位置

 (4)设置浮动属性

如果把工具栏拖出来放到窗口的任意位置,称之为浮动状态

⼯具栏的浮动属性可以通过QToolBar类提供的setFloatable()函数来设置。setFloatable()函数原 型为: void setFloatable (bool floatable)

(5) 设置移动属性

设置⼯具栏的移动属性可以通过QToolBar类提供的setMovable()函数来设置。setMovable()函数 原型为: void setMovable(bool movable)

状态栏

状态栏是应⽤程序中输出简要信息的区域。⼀般位于主窗⼝的最底部,⼀个窗⼝中最多只能有⼀个状 态栏。在Qt中,状态栏是通过QStatusBar类来实现的 

(1)状态栏的创建

(2)显示临时消息

通过showMessage可以在状态栏中显示一个文本,此时这个文本存在的时间可以自定义,timeout参数是一个 单位为ms的时间,如果timeout为0(即不写),消息就会持久存在

(3)状态栏中添加其他控件

这两个Label按照1:2的比例分布 

addWidget函数是从左往右添加

addPermanentWidget函数是从右往左添加

浮动窗⼝ 

在Qt中,浮动窗⼝也称之为铆接部件,子窗口。浮动窗⼝是通过QDockWidget类来实现浮动的功能。浮动窗 ⼝⼀般是位于核⼼部件的周围,可以有多个

(1)浮动窗⼝的创建

(2) 添加其它控件

由于dockWidget中只能包含一个Qwidget,要想添加更多的控件就只能往QWidget中进行添加了

(3)设置停靠的位置

浮动窗⼝是位于中⼼部件的周围。可以通过QDockWidget类中提供setAllowedAreas()函数设置其 允许停靠的位置。其中可以设置允许停靠的位置有:

• Qt::LeftDockWidgetArea 停靠在左侧

• Qt::RightDockWidgetArea 停靠在右侧

• Qt::TopDockWidgetArea 停靠在顶部

• Qt::BottomDockWidgetArea 停靠在底部

• Qt::AllDockWidgetAreas 以上四个位置都可停靠

对话框 

对话框通常是⼀个顶层窗⼝,出现在程序最上层,⽤于实现短期任务或者简洁的⽤⼾交互。Qt常 ⽤的内置对话框有:QFiledialog(⽂件对话框)、QColorDialog(颜⾊对话框)、QFontDialog (字体对话框)、QInputDialog(输⼊对话框)和QMessageBox(消息框)

(1)创建对话框

(2)在主窗口中,通过点击按钮,弹出一个新的对话框

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

不同于界面上的其他控件,此处QDialog每次按下按钮,都会创建一个新的QDialog对象,并进行显示,即每次点击都会创建新的对话框对象

在一个程序运行过程中,可以无数次点击这个按钮,进一步的就产生出无数个这样的对象了,这就会导致内存泄露的问题

确实这里指定父元素为this,QMainWindow被销毁的时候,此时QDialog也会随之销毁,但是有时QDialog会在QMainWindow之前就存在很多个

如果把delete放到这里,很明显,对话框就会一闪而过

正确做法应该是让用户点击对话框关闭按钮的时候,再来触发这里的delete操作 

 (3)自定义对话框

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

1.通过代码的方式来自定义QDialog界面

这里需要创建一个继承自QDialog的Dialog类

 

 

 

2.通过图形化的方式

这里的关键操作就是要创建一个新的ui文件出来,会创建出一个ui文件以及对应的类

 

在dialog.ui文件中创建一个label和一个pushbutton

 

在mainwindow.ui中创建一个pushbutton按钮 

 

 

 (4)模态与非模态

模态:弹出对话框的时候,此时用户无法操作父窗口,必须得完成对话框内部的操作,关闭对话框之后才能操作父窗口。用于特别关键的场合,此时用户必须要做出决策

非模态:弹出对话框的时候,用户可以操作父窗口

当使用dialog->show()时产生的是非模态对话框

当使用dialog->exec()时产生的是模态对话框

Qt内置对话框

Qt提供了多种可复⽤的对话框类型,即Qt标准对话框。Qt标准对话框全部继承于QDialog类

1.消息对话框QMessageBox 

消息对话框主要⽤于为⽤⼾提⽰重要信息,强制⽤⼾进 ⾏选择操作

代码实例:创建一个简单的消息对话框

对于这里设置的图标,ctrl+鼠标左键点击Warning时就会显示出QMessageBox内置的图标

 

对于这里的标准按钮,ctrl+鼠标左键点击OK时就会显示出QMessageBox内置的标准按钮

 

代码实例:添加自定义按钮 

对于addButton这个函数的函数参数为

 

对于第一个参数是QAbstractButton类型的指针

 这几个按钮是继承自QAbstractButton类的,所以对于QPushButton的对象是可以直接传给父类对象的 

对于第二个参数可以按住ctrl+鼠标左键点击addButton函数去查看的

也可以点击F1和addButton函数查看对应的介绍文档

 这里还可以通过获取messageBox->exec()函数的返回值来判断用户点击的是哪个内置按钮,再执行对应的操作,对于自定义按钮采用connect关联槽函数的方式来执行对应的操作

代码实例:通过内置静态函数快速构建QMessageBox

 

 

 

2.颜⾊对话框QColorDialog 

QColorDialog的功能就是内置了调色板,允许⽤⼾选择颜⾊,效果和画图板的调色板非常类似

常⽤⽅法介绍:

1、QColorDialog(QWidget*parent=nullptr) //创建对象的同时设置⽗对象

2、QColorDialog(const QColor &initial, QWidget *parent = nullptr) //创建对象的同时通过QColor 对象设置默认颜⾊和⽗对象

3、voidsetCurrentColor(const QColor &color) //设置当前颜⾊对话框

4、QColorcurrentColor() const //获取当前颜⾊对话框

5、QColorDialog::getColor(const QColor &initial = Qt::white, QWidget *parent = nullptr, const QString &title = QString(), QColorDialog::ColorDialogOptions options = ColorDialogOptions()) //打开颜⾊ 选择对话框,并返回⼀个QColor对象 

参数说明: initial:设置默认颜⾊ parent:设置⽗对象 title:设置对话框标题 options:设置选项 6、 voidopen(QObject*receiver,constchar*member) //打开颜⾊对话框

 代码实例:通过QColorDialog选择颜色修改背景色

这里就不再采用以往的在堆上创建对象的方法,而是采用上述getColor的方法,这个函数就能够弹出一个模态对话框,用户在选择颜色之后,点击确定,对话框就会关闭,其返回值就是用户选择的颜色

3.⽂件对话框QFileDialog 

⽂件对话框⽤于应⽤程序中需要打开⼀个外部⽂件或需要将当前内容存储到指定的外部⽂件

通过QFileDialog可以选择一个文件,能够获取到文件的路径

常⽤⽅法介绍:

1、打开⽂件(⼀次只能打开⼀个⽂件) QString getOpenFileName(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options())

2、打开多个⽂件(⼀次可以打开多个⽂件) QStringList getOpenFileNames(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options())

3、保存⽂件 QString getSaveFileName(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options())

参数说明: 参数1:parent ⽗亲 参数2:caption 对话框标题 参数3:dir 默认打开的路径 参数4:filter ⽂件过滤器

代码实例:打开/保存文件

 

 

4.字体对话框QFontDialog 

Qt 中提供了预定义的字体对话框类QFontDialog,⽤于提供选择字体的对话框部件。

代码实例:给按钮设置用户选择字体的相关属性

5.输⼊对话框QInputDialog 

让用户输入一个具体的数据,可以是整数,浮点数,字符串

常⽤⽅法介绍:

1、双精度浮点型输⼊数据对话框 double getDouble(QWidget*parent,constQString&title, const QString&label, double value =0,doublemin=-2147483647,doublemax=2147483647,intdecimals=1,bool*ok =nullptr, Qt::WindowFlags flags = Qt::WindowFlags()); 

2、整型输⼊数据对话框 int getInt (QWidget *parent, const QString &title, const QString &label, int value = 0, int min=-2147483647,intmax=2147483647,intstep=1,bool*ok=nullptr,Qt::WindowFlags flags = Qt::WindowFlags());

3、选择条⽬型输⼊数据框 QString getItem (QWidget*parent, const QString&title, const QString &label, const QStringList &items, int current = 0, bool editable = true, bool *ok =nullptr, Qt::WindowFlags flags = Qt::WindowFlags(), Qt::InputMethodHints inputMethodHints = Qt::ImhNone) ;

参数说明: parent:⽗亲 title:对话框标题 label:对话框标签 items:可供选择的条⽬

代码实例:数据输入对话框

 

总结 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网路安全-安全渗透简介和安全渗透环境准备

文章目录 前言1. 安全渗透简介1.1 什么是安全渗透?1.2 安全渗透所需的工具1.3 渗透测试流程 2. 使用 Kali Linux 进行安全渗透2.1 下载ISO镜像2.2 下载VMware Workstaion软件2.3 Kali Linux简介2.4 准备Kali Linux环境2.5 Kali Linux初始配置2.6 VIM鼠标右键无法粘贴…

【Kubernetes】K8s中Container(容器)、Pod(小组)和node(节点)概念讲解

Kubernetes学习之路 第一章 Kubernetes学习入门之Container(容器)、Pod(小组)和node(节点)概念 文章目录 Kubernetes学习之路前言一、Container(容器)二、Pod(小组)1.单容器 Pod2.多容器 Pod 三、Container(容器&…

CSS的动画效果

动画效果 语法: 创建动画:keyframes 调用动画:animation animation参数值 参数值效果animation-name规定 keyframes 动画的名称。animation-duration规定动画完成一个周期所花费的秒或毫秒。默认是 0animation-timing-function规定动画的速…

遥感反演保姆级教程:SPSS筛选因子之后如何采用python建模和反演整个研究区?(以反演生物量为例)

SPSS筛选因子之后如何采用python建模和反演整个研究区?(以反演生物量为例) 引言 在遥感数据分析中,因子筛选和建模是关键步骤。筛选出与目标变量(如生物量)显著相关的因子,不仅可以提高模型的预测精度&a…

某音作品列表,视频列表

声明:文章仅用于学习交流,如有侵权请联系删除 今天分享下某音app作品列表采集方法,我只详细说一下大步骤,细节就不多说了,留着大家去试吧 我们通过Fiddler 快捷方式 配置好代理 打开抖音进行抓包,随便找个达人打开主…

了解Redis数据持久化(中)

3.5写时复制 Redis在使用RDB方式进行持久化时,会用到写时复制机制。写时复制的效果: bgsave子进程相当于复制了原始数据,而主线程仍然可以修改原来的数据。 对Redis来说,主线程fork出bgsave子进程后,bgsave子进程实际是复制了主线…

Jmeter 性能测试实战教程

一、性能测试流程 进行性能测试前,我们首先需要了解一下性能测试大致分为哪些流程,这样才能保证测试过程有序开展: 1、性能需求分析 了解哪些业务需要(一般都是用户量大的核心业务,比如登录,查询等功能&…

go国内源设置

一、背景 部分网络环境不稳定、丢包或无法连外网,在编译go代码时,需要更新相关依赖,可通过设置go国内源地址来更新。 二、国内可用镜像源 2.1 镜像源一 https://goproxy.cn 2.2 镜像源二 https://goproxy.io 2.3 镜像源三 https://gop…

使用vagrant、virtualbox、快速创建kali linux

使用vagrant、virtualbox、快速创建kali linux 初始化kali下载vagrant相应镜像vagrant添加相应镜像创建vagrantfile在vagrantfile根目录执行cmd虚拟机登录密码修改sshd配置 用shell远程链接(可选)可视化界面设置成中文创建成功展示图 添加实体网卡使用kali 破解WiFi密码解决 on…

爆改YOLOv8 | 利用MB-TaylorFormer提高YOLOv8图像去雾检测

1,本文介绍 MB-TaylorFormer是一种新型多支路线性Transformer网络,用于图像去雾任务。它通过泰勒展开改进了softmax-attention,使用多支路和多尺度结构以获取多层次和多尺度的信息,且比传统方法在性能、计算量和网络重量上更优。…

Redis面试都卷到C语言去了。。。

Redis 面试都卷到 C 去了。有个小伙伴在前两天找松哥模面的时候如是说到。 是啊,没办法,自从 Java 八股文这个概念被提出来并且逐步在 Java 程序员中强化之后,现在各种各样的八股文手册,有免费的有付费的,琳琅满目。 …

秃姐学AI系列之:GoogLeNet + 代码实现

目录 GoogLeNet —— 含并行连结的网络 卷积层超参数 Inception块:小学生才做选择,我全要! 为什么要用Inception块? GoogLeNet架构 详细展开每个Stage Stage 1 & 2 Stage 3 Stage 4 & 5 Inception 有各种后续变…

CocosCreator3.8 IOS 构建插屏无法去除的解决方案

CocosCreator3.8 IOS 构建插屏无法去除的解决方案 在实际项目开发过程中,我们通常无需CocosCreator 自带的插屏,一般采用自定义加载页面。 然后在构建IOS 项目时,启用(禁用)插屏无法操作,如下图所示&#…

Unity Protobuf3 GC 问题(反序列化)

背景:Unity接入的是 Google Protobuf 3.21.12 版本,排查下来反序列化过程中的一些GC点,处理了几个严重的,网上也有一些分析,这里就不一一展开,默认读者已经略知一二了。 如果下面有任何问题请评论区留言提…

Web攻防之应急响应(一)

目录 1. 前言 2. 靶场准备 3. 应急场景 4. 应急实战 4.1 查看服务器开放端口 4.2 通过远程链接工具连接服务器 4.3 寻找中间件日志 4.4. 查看并下载日志 4.5 初步分析日志 4.6 查看安全分析报告 4.6 从被篡改的页面开始 4.6 通过修改的文件时间进一步分析日志信息 4.…

如何给10000张图片快速打标签,一招教你节省上千小时!看这期就够了!免费素材管理插件分享

如果给1万张图片打标签,你会怎么做?如果你用过eagle或者billfish的话,那么你一定知道,他们都没有支持用AI来自动给素材打标签。 一旦我们素材多起来的时候,手动输入,键盘都要打冒烟了,效率太低…

企业级NoSql数据库Redis集群

数据库主要分为两大类:关系型数据库与 NoSQL 数据库 关系型数据库 ,是建立在关系模型基础上的数据库,其借助于集合代数等数学概念和方法来处理数据库 中的数据主流的 MySQL 、 Oracle 、 MS SQL Server 和 DB2 都属于这类传统数据库。 …

中仕公考怎么样?2025国考报名流程介绍!

现在是八月下旬,距离2025年国考的开始日期越来越近,今天来给大家分享一下国考报名的流程,希望大家提前做个了解。 报考时间(参考去年) 职位表发布:24年10月中旬 网上报名:24年10月中下旬 报名确认:24年…

昂科烧录器支持Melexis迈来芯的位置传感器MLX90365KDC

芯片烧录行业领导者-昂科技术近日发布最新的烧录软件更新及新增支持的芯片型号列表,其中Melexis迈来芯的位置传感器MLX90365KDC已经被昂科的通用烧录平台AP8000所支持。 MLX90365KDC是第II代Triaxis位置传感器IC。 这款单片器件可凭借其表面的集磁点(IMC)&#xf…

ai变声:视频怎么变音?分享6个语音变声器,视频变声不再难!

想过如何让自己的直播内容更吸引人吗?你是否希望通过变声器来打造独特的声音效果?或者,如何用创意声音提升观众的互动体验呢?随着直播行业的不断发展,每位主播都在努力寻找吸引观众的独特方式,而变声器正是…