【Qt】:窗口

窗口

一.概述

Qt窗口是通过QMainWindow类来实现的。

QMainWindow是一个为用户提供主窗口程序的类,继承自QWidget类,并且提供了一个预定义的布局。QMainWindow包含一个菜单栏(menu bar)、多个工具E(tool DaIr's)、多1行园口多以接部件)(dock widgets)、一个状态栏(status bar)和一个中心部H什(cenlra wIugeC,t他位.用程序的基础,如文本编辑器,图片编辑器等。如下图为QMainwindow中各组件所处的位置:

从上往下分别是菜单栏,工具栏,子窗口,中央窗口,状态栏。

二.菜单栏

Qt中的菜单栏是通过QMenuBar这个类来实现的。一个主窗口最多只有一个菜单栏。位于主窗口顶部、主窗口标题栏下面。菜单栏中包含菜单.菜单中包含菜单项.

创建一个菜单

1.一个简单的菜单

创建流程:菜单栏->菜单->菜单项

菜单栏的创建可以借助于QMainWindow类提供的menuBar()函数来实现

创建菜单,并通过 QMenu 提供的 addMenu() 函数来添加菜单

在Qt中,并没有专⻔的菜单项类,可以通过 QAction 类,抽象出公共的动作

如果想让菜单项可点击也很简单,只需要设置槽函数与trigge(点击信号)相连即可。

小知识:如果上述我们重复创建了menuBar,就会导致旧的menuBar脱离对象树,从而无法释放,造成内存泄漏。更推荐使用this->menuBar()的方式创建,如果已经创建了menuBar则返回已经创建了的,否则就新建一个。

2.添加快捷键

如果想要添加快捷键,只需要&+按键,例如:给文件取快捷键F,只需要在文件后面加&F即可。键盘alt+f即可。

3.嵌套子菜单

菜单里也可以嵌套子菜单

4.添加下划线

在菜单项之间可以添加分割线。添加分割线是通过 QMenu 类提供的addSeparator() 函数来实现;

5.添加图标

依然使用qrc文件,利用函数setIcon就可以设置。

三.工具栏

工具栏是应用程序中集成各种功能实现快捷键使用的一个区域。可以有多个,也可以没有,它并不是应用程序中必须存在的组件。它是一个可移动的组件,它的元素可以是各种窗口组件,它的元素通常以图标按钮的方式存在。如下图为工具栏的示意图:

1.创建一个简单的工具栏

当然也可以创建图标。

2.设置工具栏的停靠位置

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

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

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

  1. Qt::LeftToolBarArea 停靠在左侧
  2. Qt::RightToolBarArea 停靠在右侧.
  3. Qt::TopToolBarArea 停靠在顶部.
  4. Qt:.BottomToolBarArea 停靠在底部.
  5. Qt:AllToolBarAreas 以上四个位置都可停靠

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

在创建工具栏的同时指定其停靠的位置,指的是程序运行时工具栏默认所在的位置;而使用setAllowedAreas()函数设置停靠位置,指的是工具栏允许其所能停靠的位置。

四.状态栏

状态栏是应用程序中输出简要信息的区域。一般位于主窗口的最底部,一个窗口中最多只能有一个状态栏。在Qt中,状态栏是通过QstatusBar类来实现的。在状态栏中可以显示的消息类型有:

实时消息:如当前程序状态

永久消息:如程序版本号,机构名称

进度消息:如进度条提示,百分百提示

代码示例:创建一个状态栏

如果时间设置为0或者默认,就是长久显示。

状态栏里除了可以显示文本外,也可以显示器件。

五.浮动窗口

浮动窗口的创建是通过QDockWidget类提供的构造方法QDockWidget()函数动态创建的;浮动窗口其实就是子窗口。

代码示例

1.创建一个浮动窗口

2.给窗口添加各种属性

相关推荐
美狐美颜SDK开放平台5 小时前
直播APP如何实现美白滤镜功能?视频美颜SDK技术开发方案详解
前端·数据库·人工智能·音视频·美颜sdk·直播美颜sdk·视频美颜sdk
顽疲6 小时前
Java vue 养老系统源码详解:月账单 care_month_bill 与 Quartz 扣费 Job 实践
java·开发语言·vue.js·vue养老·springboot养老·java养老
用户8334423966146 小时前
从批量操作到任务中心,再到现场工作台:DeviceForge v2.10—v2.12 完整演进
qt
Wang's Blog6 小时前
Java 项目实战: 交友项目 - 安装开发工具与环境准备
java·开发语言·交友
花间相见6 小时前
【计算基础|MySQL01】【上手】安装连接、数据类型与建库建表
数据库·后端
花间相见7 小时前
【计算基础|MySQL02】【上手】SQL 增删改查
数据库·后端
ITxiaobing20237 小时前
IP 库与 AppsFlyer 国家/地区数据不一致,如何系统地对账?
数据库·网络协议·tcp/ip
这个DBA有点耶7 小时前
从时间到语义:时序数据库与向量数据库的核心机制、选型与多模融合趋势
数据库·mysql·架构
对空六课7 小时前
RFM分层边界变化的回溯计算
大数据·服务器·前端·数据库·人工智能·算法·数据分析
小羊没烦恼!7 小时前
如何在IIS6,7中部署ASP.NET网站?
数据库·后端·python·web安全·asp.net