QT开发(二) 构建QMainWindow

1、前言

QMainWindow是Qt框架中用于创建应用程序主窗口的类。它是许多GUI应用程序的基础,提供了丰富的功能和灵活性,以支持用户界面的创建和管理。

QMainWindow的结构主要包括以下几个部分:

  • 菜单栏(Menu Bar):菜单栏位于主窗口的顶部,包含一系列命令的列表。这些命令通常以菜单项的形式展示,用户可以通过点击菜单项来执行相应的操作。菜单栏在Qt中是通过QMenuBar类来实现的,而菜单项则通过QMenu类来创建。
  • 工具栏(Toolbars):工具栏是由一系列类似于按钮的动作排列而成的面板,通常包含应用程序中经常使用的命令。工具栏通过QToolBar类来实现,可以方便地添加、删除或重新排列工具栏中的按钮和控件。
  • 停靠窗口(Dock Widgets):停靠窗口作为容器使用,用于包容其他窗口部件以实现特定的功能。停靠窗口可以停靠在主窗口的任意边缘,或者浮动在窗口外部。Qt通过QDockWidget类提供了对停靠窗口的支持。
  • 状态栏(Status Bar):状态栏通常位于主窗口的底部,用于显示应用程序的状态信息或其他提示性内容。通过QStatusBar类,可以方便地添加、更新和删除状态栏中的文本或控件。
  • 中央窗口(Central Widget):中央窗口是主窗口的中心区域,用于展示应用程序的主要内容和功能。中央窗口可以使用任何形式的QWidget来填充,如文本框、图像、表格等。通过setCentralWidget()函数,可以将自定义的QWidget设置为中央窗口的内容。

QMainWindow的设计既可以通过编程实现,也可以直接在UI文件中进行设计

编程设计通常涉及到直接编写代码来创建和配置QMainWindow的各个部分,包括菜单栏、工具栏、状态栏以及中心部件等。这种方式具有较高的灵活性和定制性,但可能需要更多的编程知识和经验。

另一方面,Qt也提供了UI设计工具(如Qt Designer),允许开发者直接在UI文件中进行可视化设计。在UI文件中,开发者可以使用拖放的方式添加和配置各种控件和部件,然后保存为.ui文件。随后,可以使用Qt的uic工具将.ui文件转换为C++代码,以便在应用程序中使用。这种方式对于不熟悉编程的设计师或者希望快速原型设计的开发者来说可能更为方便。

2、使用代码构建

新建工程后编辑mainwindow.cpp,使用代码的方式构建上述区域:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QToolBar>
#include <QPushButton>
#include <QLabel>
#include <QTextEdit>
#include <QDockWidget>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);// 重置窗口大小resize(600,500);// 创建菜单栏 菜单栏最多一个QMenuBar *menuBar = new QMenuBar(this);// 将菜单栏置到窗口setMenuBar(menuBar);// 创建文件菜单QMenu *fileMenu = menuBar->addMenu("file");QMenu *editMenu = menuBar->addMenu("edit");// 创建菜单项fileMenu->addAction("open");fileMenu->addSeparator();       // 添加分隔fileMenu->addAction("save");editMenu->addAction("select");// 工具栏 可以有多个QToolBar *toolBar = new QToolBar(this);addToolBar(Qt::RightToolBarArea, toolBar);// 设置工具栏只允许左右停靠toolBar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);// 设置浮动// toolBar->setFloatable(false);// 设置移动// toolBar->setMovable(false);// 设置工具选项toolBar->addAction("new");toolBar->addSeparator();       // 添加分隔toolBar->addAction("look");// 工具栏中添加控件QPushButton *btn = new QPushButton("trans", this);toolBar->addWidget(btn);// 状态栏 最多一个QStatusBar *stb = new QStatusBar(this);// 设置到窗口setStatusBar(stb);// 设置标签控件提示信息QLabel *label = new QLabel("state",this);stb->addWidget(label);// 停靠窗口 可以有多个QDockWidget *dw = new QDockWidget("on", this);addDockWidget(Qt::RightDockWidgetArea, dw);// 核心部件QTextEdit *tx = new QTextEdit(this);setCentralWidget(tx);
}MainWindow::~MainWindow()
{delete ui;
}

运行后可以查看构建完成的界面:

3、编辑ui构建

新建工程,双击Forms文件夹下的mainwindow.ui进行编辑:

构建完成后的效果如下:

4、添加资源

以添加图标为例,首先我们可以在控件的icon属性中选择文件,然后进行指定达到如下效果:

同时也可以通过添加资源的方式通过代码去指定显示的样式,将图片等资源放到一个文件夹下,然后将文件夹放置到项目目录下,右键项目,选择Add New,然后根据图示依次选择:

选择放置到项目目录下的资源文件,并给资源取名:

右击资源文件选择Open in Editor:

依次添加前缀和文件:

使用代码指定资源,最终实现效果如下:

5、总结

本文讲述了QMainWindow的构成和一般构建方法,详细说明了资源的添加方法。

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

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

相关文章

【超级干货】播放器核心知识点-音视频同步原理深入剖析

引言 本文是自己学习利用ffmpeg实现音视频同步播放的总结文档,参考了网上一些博客,同时调试ffplay源码进行理解,站在巨人的肩膀上学习,感谢开源和分享精神。文中粘贴的代码每行都有注释,确保读者能理解所涉函数的每一行代码的意义。 章节 因为ffplay源码阅读起来比较复…

微服务技术栈之rabbitMQ基础入门(一)

准备工作&#xff1a; 1&#xff0c;创建空的工程&#xff1a; 首先我们先创建一个空的工程&#xff0c;并且命名为 mq-java 2&#xff0c;创建一个生产者springboot工程&#xff08;plblisher&#xff09;&#xff1a; 设置项目的基本信息&#xff1a; 勾选版本和依赖&…

京东商品详情接口数据采集—价格,库存,支持高并发

初识API调用 为帮助商家及开发者快速掌握京东API调用方法&#xff0c;本文为大家提供的万邦API工具为例&#xff0c;为读者演示一例API调用过程&#xff0c;并做相应讲解。 item_get-获得JD商品详情 1、API公共参数示例 请求地址: https://api-gw.onebound.cn/jd/item_get …

Spring循环依赖的成因与破局

一、Spring注入类型 Spring 核心功能之一依赖注入&#xff0c;依赖注入是使用 Spring 框架的基本手段&#xff0c;通过他获取各种类型的 bean&#xff0c;但使用不同的依赖注入类型时经常会遇到循环依赖的问题。Spring 依赖注入类型&#xff1a; 字段注入&#xff0c;这是最常…

Word中解决插入脚注导致的分页位置错误问题

先放一个截图&#xff1a; 上面的截图中&#xff0c;样式为标题3的段落“四、固执的念头”前插入了连续型分节符&#xff0c;并且该分节符的样式为正文&#xff0c;前后的正文段落中有脚注&#xff0c;结果在分页时&#xff0c;标题3段落“四、固执的念头”后的正文段落自动进入…

什么台灯对眼睛好?揭秘四款央视推荐的护眼台灯

近年来&#xff0c;随着电子产品的普及&#xff0c;虽说给生活带来了许多便利&#xff0c;不过对于眼睛还没发育完全的孩子而言&#xff0c;经常使用电子产品是非常容易伤眼的&#xff0c;更何况这些孩子每天还需要长时间的用眼学习&#xff0c;眼睛的负担是非常大的。所以在学…

谷粒商城【成神路】-【10】——缓存

目录 &#x1f9c2;1.引入缓存的优势 &#x1f953;2.哪些数据适合放入缓存 &#x1f32d;3.使用redis作为缓存组件 &#x1f37f;4.redis存在的问题 &#x1f9c8;5.添加本地锁 &#x1f95e;6.添加分布式锁 &#x1f95a;7.整合redisson作为分布式锁 &#x1f697…

java学习之路-数据类型与变量

目录 数据类型与变量 1. 字面常量 2. 数据类型 3. 变量 3.1 变量概念 3.2 整型变量 3.2.1 整型变量 3.2.2 长整型变量 3.2.3 短整型变量 3.2.4 字节型变量 3.3 浮点型变量 3.3.1 双精度浮点型 3.3.2 单精度浮点型 3.4 字符型变量 3.5布尔型变量 3.6 类型转换 …

MySQL--索引优化实战篇(2)

前言&#xff1a; 我们常说的SQL优化&#xff0c;简单来说就是索引优化&#xff0c;通过合理创建索引&#xff0c;调整SQL语法等&#xff0c;来提升查询效率&#xff0c;想要进行SQL优化&#xff0c;就必须知道索引的原理&#xff0c;而且能够看懂SQL的执行计划。 MySQL–索引…

数据保护设备的主要功能是什么

数据保护设备在当今数字化时代扮演着至关重要的角色。随着信息技术的迅猛发展&#xff0c;数据的产生、传输和存储量呈现出爆炸式增长&#xff0c;数据的安全性和完整性成为了企业和个人关注的重点。数据保护设备作为保障数据安全的重要手段&#xff0c;正逐渐受到广泛关注和应…

Python图像处理【22】基于卷积神经网络的图像去雾

基于卷积神经网络的图像去雾 0. 前言1. 渐进特征融合网络2. 图像去雾2.1 网络构建2.2 模型测试 小结系列链接 0. 前言 单图像去雾 (dehazing) 是一个具有挑战性的图像恢复问题。为了解决这个问题&#xff0c;大多数算法都采用经典的大气散射模型&#xff0c;该模型是一种基于单…

基于多源信息融合的巡飞弹对地目标识别与毁伤评估

源自&#xff1a;系统仿真学报 作者&#xff1a;徐艺博 于清华 王炎娟 郭策 冯世如 卢惠民 “人工智能技术与咨询” 发布 摘 要 面向利用多枚巡飞弹对地面高防御移动目标进行打击的任务场景&#xff0c;提出一种基于多源信息融合的巡飞弹对地移动目标识别与毁伤评估方法…