【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.给窗口添加各种属性

相关推荐
gcw10245 分钟前
Cron专业工具:定时任务与开发办公的一站式在线工具箱
java·前端·数据库·工具·crontab·cron·spring cron
江华森8 分钟前
Gephi 可视化 + NetworkX 网络分析——《釜山行》人物关系(三)
数据库·python
whaledown13 分钟前
互联网大厂Java求职面试三轮提问详解(涵盖Spring Boot、微服务、Kafka等核心技术)
java·jvm·数据库·spring boot·微服务·面试·kafka
apihz21 分钟前
经纬度制作高清卫星图片免费 API 接口详解
开发语言·ios·swift
运维大师26 分钟前
【安全与故障排查】06-【复盘】生产数据库删库事故:RTO4小时恢复纪实
数据库·安全
娇气的红酒35 分钟前
微软对PHP支持的改进,及其它一些胡言乱语
开发语言·microsoft·php
霸道流氓气质38 分钟前
Harness Engineering 模块化指令实战:告别 600 行巨型 AGENTS.md
开发语言·人工智能·python
Traveler飞41 分钟前
Ubuntu20.04 VMware 黑屏无法进入桌面,Ctrl+Alt+F2 可以进入终端,最终发现是磁盘空间满了
qt·ubuntu
吠品1 小时前
Mac定时关机、开机自动化:用shutdown和pmset就够了
android·java·开发语言
ywl4708120871 小时前
Mysql,使用B+树存储的索引增删改查效率(七)
数据库·b树·mysql