【Qt】QMainWindow

news2024/11/16 20:34:23

文章目录

  • **QMainWindow**简介
    • 菜单栏
    • 工具栏
    • 状态栏
    • **铆接部件**
    • 核心部件(中心部件)
  • 资源文件
    • QtCreator导入资源文件
    • VS导入资源文件
    • 使用资源文件

QMainWindow简介

QMainWindow是一个为用户提供主窗口程序的类,包含一个菜单栏(menu bar)、多个工具栏(tool bars)、多个锚接部件(dock widgets)、一个状态栏(status bar)及一个中心部件(central widget),是许多应用程序的基础,如文本编辑器,图片编辑器等

img


细节:只有一个的内容,将其设置到窗口的函数以set开头,可以有多个的内容,将其设置到窗口的函数以add开头


菜单栏

一个主窗口最多只有一个菜单栏。通常位于主窗口顶部、主窗口标题栏下面

创建菜单栏

//创建菜单栏 =>最多只能有一个
QMenuBar* bar = menuBar();//获取主窗口菜单栏指针   
setMenuBar(bar);//将菜单栏放入窗口中,空菜单栏默认什么都没有

该函数是已经封装好的,只需要如此创建即可,不需要在构造对象的时候传入父类的指针

添加菜单

//创建菜单
QMenu* fileMenu = bar->addMenu("文件");
QMenu* editMenu = bar->addMenu("编辑");

创建菜单项

//为菜单添加菜单项
QAction* newAction = fileMenu->addAction("新建");
fileMenu->addSeparator();//两个菜单项(新建和打开)之间的分割线
QAction* openAction = fileMenu->addAction("打开");

Qt 并没有专门的菜单项类,只是使用一个QAction类,抽象出公共的动作。当我们把QAction对象添加到菜单


工具栏

主窗口的工具栏上可以有多个工具条,通常采用一个菜单对应一个工具条的的方式,也可根据需要进行工具条的划分

注意:工具条是一个可移动的窗口,它的停靠区域由QToolBar的allowAreas决定,包括的选项为:

  • Qt::LeftToolBarArea 停靠在左侧

  • Qt::RightToolBarArea 停靠在右侧

  • Qt::TopToolBarArea 停靠在顶部

  • Qt::BottomToolBarArea 停靠在底部

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

可以使用setAllowedAreas()函数指定停靠区域使用setMoveable(bool flag = true)函数设定工具栏的可移动性,默认参数为true,如果为false,表明工具条不可移动, 只能停靠在初始化的位置上

//工具栏 =>可以有多个
QToolBar* toolBar = new QToolBar(this);//将当前对象放到对象树当中

//将工具栏放入到当前窗口当中,否则不显示
//addToolBar(toolBar);

//可以指定工具栏最初放到哪一边
addToolBar(Qt::LeftToolBarArea, toolBar);//将工具栏默认最初放在左边 	第一个参数:默认停靠区域 第二个参数:工具栏指针

//将工具栏设置成 只允许左右停靠
toolBar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);

//设置工具栏是否可以浮动,默认是可以的,参数为true
toolBar->setFloatable(false);

//设置工具栏是否可以移动,默认可以(总开关函数,如果关闭了,那么上述的设置都没有意义)
//toolBar->setMovable(false);

//工具栏当中也可以设置内容
//此时工具栏当中的新建和打开  和 菜单栏文件当中的新建和打开一样
toolBar->addAction(newAction);
toolBar->addSeparator();//添加分割线
toolBar->addAction(openAction);

//工具栏当中添加控件
QPushButton* btn = new QPushButton("按钮", this);
toolBar->addWidget(btn); //QPushButton的父类就是QWidget

状态栏

状态栏也只能最多有一个,派生自QWidget类,使用方法与QWidget类似,QStatusBar类常用成员函数

//添加小部件
void addWidget(QWidget * widget, int stretch = 0)
//插入小部件
int	insertWidget(int index, QWidget * widget, int stretch = 0)
//删除小部件
void removeWidget(QWidget * widget)

//状态栏 => 最多只有一个
QStatusBar* stBar = statusBar();
setStatusBar(stBar);//将状态栏设置到窗口当中

//往状态栏放入标签控件
QLabel* left_label = new QLabel("左侧提示信息", this);
stBar->addWidget(left_label); //默认放在左边

QLabel* right_label = new QLabel("右侧提示信息", this);
stBar->addPermanentWidget(right_label); //将信息放在右侧

铆接部件

铆接部件 QDockWidget,也称浮动窗口,可以有多个

//铆接部件(浮动窗口) =>可以有多个
QDockWidget* dockWidget = new QDockWidget("浮动窗口", this);
addDockWidget(Qt::BottomDockWidgetArea, dockWidget);//停靠在底部 第一个参数:默认停靠区域 第二个参数:浮动窗口指针

// 设置后续可以停靠区域,只允许上下
dockWidget->setAllowedAreas(Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea);

核心部件(中心部件)

中心显示的部件都可以作为核心部件,例如一个记事本文件,可以利用QTextEdit做核心部件

//设置中心部件 => 只能有一个
QTextEdit* edit = new QTextEdit(this);
setCentralWidget(edit);//将中心部件放入到窗口当中

上述代码最后形成的效果:

image-20231004102314235


资源文件

Qt 资源系统是一个跨平台的资源机制,用于将程序运行时所需要的资源以二进制的形式存储于可执行文件内部。如果你的程序需要加载特定的资源(图标、文本翻译等),那么将其放置在资源文件中,就再也不需要担心这些文件的丢失

  • 如果你将资源以资源文件形式存储,它是会编译到可执行文件内部

QtCreator导入资源文件

1.1 将图片文件 拷贝到项目位置下

1.2 右键项目->添加新文件 –> Qt - > Qt recourse File - >给资源文件起名

1.3 假设起名为res ,会生成 res.qrc 文件

1.4 open in editor 编辑资源

1.5 添加前缀 添加文件

1.6 使用 “ : + 前缀名 + 文件名 ”

image-20231003205923392

最好给资源文件起别名。否则如果以后我们要更改文件名,比如将 docuemnt-open.png 改成 docopen.png,那么,所有使用了这个名字的路径都需要修改。给这个文件去一个“别名”,以后就以这个别名来引用这个文件


VS导入资源文件

1.将所有图片放到各自文件夹下,并将文件夹拷贝到项目的同级目录下,如下:

image-20231004103819602

2.新建VS项目的时候,系统会自动建好一个与项目本身同名的“*.qrc文件”

  • 直接双击打开,利用Add Prefix :添加前缀,然后用Add Files:添加资源文件
  • 在开发大型项目时候,需要为不同系列的资源添加不同的前缀来加以区分。
    • 比如文件类资源可以添上前缀“\File”,编辑类资源可以添上前缀“\Edit”,设置完毕后点击左上角保存按钮即可

image-20231004103934192

注意:添加完资源文件,一定要记得保存,不然添加的资源文件无效


使用资源文件

引用格式: : / 前缀名 / 文件名 ( 别名 ) :/前缀名/文件名(别名) :/前缀名/文件名(别名)

image-20231004105912871


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

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

相关文章

AMP 软中断的过程和GPIO中断差别

ZYNQ笔记(5):软中断实现核间通信 - 咸鱼IC - 博客园 (cnblogs.com) ZYNQ基础----AMP核间软中断_zynq核间中断-CSDN博客 相较于GPIO中断,省去了对中断触发敏感类型的配置(软中断不可配),对中断管…

session是什么?cookie是什么,两者的区别,以及应用的场景?

Session和Cookie是两个常见的Web开发中用于状态管理的概念。Session是服务器端用来存储用户信息的一种机制。Cookie是一种存储在客户端浏览器中的小型文本文件。 当用户访问一个网站时,服务器为该用户创建一个唯一的Session,并生成一个Session ID。这个…

【CVPR 2023】 All are Worth Words: A ViT Backbone for Diffusion Models

All are Worth Words: A ViT Backbone for Diffusion Models, CVPR 2023 论文:https://arxiv.org/abs/2209.12152 代码:https://github.com/baofff/U-ViT 解读:U-ViT: A ViT Backbone for Diffusion Models - 知乎 (zhihu.com) All are W…

Vue实现简单的接口封装

1. 在src中创建一个api文件夹 2. 按功能、模块等新建对应的js文件 3. 在内部写对应的封装接口,并导出 import axios from "axios";/*** 接口名称:* 接收参数:* 返回参数:* */export const miens ()>{return new P…

Linux下启动jar包的几种常见方式

首先把这两个jar上传到linux ,会操作启动一个应用和同时启动多个应用 两个项目jar已上传,可去这里下载: https://download.csdn.net/download/zengzhaowu313/88411336 第一种、直接启动 jar 包 ,先启动一个应用程序 ,后面操作启…

上交所证券代码段分配规则

一、证券代码定义及编码原则 上海证券交易所证券代码采用6位阿拉伯数字编码,取值范围为000000-999999。6位代码的前3位为类别标识区,其中第一位为类别标识,第二位至第三位为业务标识,6位代码的后3位为顺序编码区: 二、…

计算机算法分析与设计(8)---图像压缩动态规划算法(含C++代码)

文章目录 一、知识概述1.1 问题描述1.2 算法思想1.3 算法设计1.4 例题分析 二、代码 一、知识概述 1.1 问题描述 1. 一幅图像的由很多个像素点构成,像素点越多分辨率越高,像素的灰度值范围为0~255,也就是需要8bit来存储一个像素的灰度值信息…

MS2401隔离式调制器可pin对pin兼容AD7401/AMC1305

MS2401是一款二阶Σ-Δ调制器,集成片上数字隔离器,能将模拟输入信号转换为高速1位码流。可pin对pin兼容AD7401/AMC1305,可兼容AD7701/AMC1306。调制器对输入信号连续采样,无需外部采样保持电路。模拟信号输入满量程为320mV&#x…

win10通过导入注册表快速添加小鹤双拼

环境:win10 win10通过导入注册表快速添加小鹤双拼 fly.reg win10导入附件中的注册表,系统将会自动添加小鹤双拼方案,并将小鹤双拼方案设置为默认。 将下面的代码复制并保存到reg文件中 Windows Registry Editor Version 5.00[HKEY_CURRENT_USER\Software\Microsoft\InputMe…

mysql作业-牛客

1 这个题已经为咱创建了表,所以直接输出就行。 select * from user_profile;2 查询多列,在select 后加上对应的列名即可 select device_id,gender,age,university from user_profile;3. 查询结果要求去重,在select 后加上distinct 再加上对…

2024年元旦怎么放假?元旦放假时间安排表记录到待办APP

结束了为其8天的中秋国庆长假,已经有不少网友开始期待下一个重要节日的到来了,它就是2024年的元旦。那么2024年元旦怎么放假?元旦放假时间安排表你知道吗?其实2024年1月1日是星期一,所以元旦放假时间是2023年12月30日—…

首批成员单位 | 聚铭网络受邀加入中国人工智能产业发展联盟数据委员会

近日,中国人工智能产业发展联盟(简称AIIA)成立“数据委员会”,**聚铭网络受邀加入,成为首批成员单位,**与其他成员单位协同推动人工智能产业发展。 中国人工智能产业发展联盟是在国家发展和改革委员会、科学技术部、工…

【网络基础必看】计算机网络 Web与HTTP详解:中科大郑烇老师笔记 (三)

目录 0 引言1 基本概念2 HTTP2.1 HTTP概况2.1.1 HTTP的主要特点2.1.2 持久HTTP和非持久HTTP2.1.3 HTTP请求报文2.1.4 HTTP响应报文 2.2 用户-服务器状态:Cookies2.3 请求-响应模型2.4 Web缓存(代理服务器) 🙋‍♂️ 作者&#xff…

spring:详解控制反转IOC和AOP

文章目录 IOC工厂模式实例基于xml管理Bean基于注解管理Bean常用注解:用于创建对象的常用注解:用于注入数据的常用注解:和生命周期相关的(了解)常用注解:新注解 IOC IOC (Inversion of Control)是Spring的核心概念之一。它是指控制…

【SoC FPGA】HPS启动过程

SoC HPS启动流程 Boot ROMPreloaderBoot Loader HPS的启动是一个多阶段的过程,每一个阶段都会完成对应的工作并且将下一个阶段的执行代码引导起来。每个阶段均负责加载下一个阶段。第一个软件阶段是引导 ROM,引导 ROM 代码查找并且执行称为预加载器的第 …

TCP协议总结

一、TCP协议概念。 TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的传输层协议。它主要用于在计算机网络中,通过建立可靠的通信连接来进行数据传输。 TCP协议的特点如下: 可靠性&#xf…

【Linux C】Linux如何执行一个程序(程序存储空间、系统调用、内核调用)

文章目录 一、程序存储空间1.1 C语言程序存储空间1.2 用户空间和内核空间1.3 用户模式和内核模式 二、内核调用-系统调用-C语言库函数2.1 系统调用和内核调用2.2 C语言库函数 三、Linux如何执行一个程序 一、程序存储空间 本节说的空间主要是指内存空间,即程序如何分…

【STM32 中断】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 STM32中断 前言一、STM32的中断如何?如何管理这么复杂的中断?实际优先级如下怎么使用呢? 二、使用步骤1.引入库函数先分组,怎么…

Gin 文件上传操作(单/多文件操作)

参考地址: 单文件 | Gin Web Framework (gin-gonic.com)https://gin-gonic.com/zh-cn/docs/examples/upload-file/single-file/ 单文件 官方案例: func main() {router := gin.Default()// 为 multipart forms 设置较低的内存限制 (默认是 32 MiB)router.MaxMultipartMem…

IP协议总结

一、定义。 IP全称为Internet Protocol,是TCP/IP协议族中的一员,负责实现数据在网络上的传输。它是一种无连接、不可靠的数据报协议。 IP协议常用于Internet网络和局域网中,它通过将数据包进行分组并进行逐跳转发来实现数据在网络中的传输。…