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的构成和一般构建方法,详细说明了资源的添加方法。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【单调栈】代码随想录算法训练营第六十天 |84.柱状图中最大的矩形(待补充)

84.柱状图中最大的矩形 1、题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 2、文章讲解&#xff1a;代码随想录 3、题目&#xff1a; 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱…

RC4算法:流密码算法的经典之作

title: RC4算法&#xff1a;流密码算法的经典之作 date: 2024/3/11 18:16:16 updated: 2024/3/11 18:16:16 tags: RC4起源演变算法优劣分析RC4 vs AES安全性RC4 vs DES性能比较应用场景介绍工作原理详解代码实例演示 一、RC4算法的起源与演变 RC4算法是由著名密码学家Ron Riv…

粒子群算法对pi控制器进行参数优化,随时优化pi参数以控制直流无刷电机转速。

粒子群算法对pi控制器进行参数优化&#xff0c;随时优化pi参数以取得设定直流无刷电机转速。 PSO优化PID&#xff0c;用于BLDC速度控制 仿真平台为&#xff1a;MATLAB 采用的是Simulinkm程序相配合 仿真结果以及程序示例&#xff1a;

UnityShader常用算法笔记(颜色叠加混合、RGB-HSV-HSL的转换、重映射、UV序列帧动画采样等,持续更新中)

一.颜色叠加混合 1.Blend混合 // 正常&#xff0c;透明度混合 Normal Blend SrcAlpha OneMinusSrcAlpha //柔和叠加 Soft Additive Blend OneMinusDstColor One //正片叠底 相乘 Multiply Blend DstColor Zero //两倍叠加 相加 2x Multiply Blend DstColor SrcColor //变暗…

一款前端开发工具Hbuilder

背景&#xff1a;最近日在接触前同事留下的一个VUE项目&#xff08;只有前端代码&#xff0c;后台服务压根没写真不知道以前是怎么糊弄过去的&#xff09;时&#xff0c;发现一款可以快速开发前端的软件&#xff1b;今日分享一下。 当我打开项目时发现&#xff0c;有个app.vue…

C语言——详解字符函数和字符串函数(一)

Hi,铁子们好呀&#xff01;今天博主来给大家更一篇C语言的字符函数和字符串函数~ 具体讲的内容如下&#xff1a; 文章目录 &#x1f386;1.字符分类函数&#x1f4af;&#x1f4af;⏩1.1 什么是字符分类函数的&#xff1f;&#x1f4af;&#x1f4af;⏩1.2 字符函数的类型有哪…

回归预测 | Matlab实现GSWOA-KELM混合策略改进的鲸鱼优化算法优化核极限学习机的数据回归预测

回归预测 | Matlab实现GSWOA-KELM混合策略改进的鲸鱼优化算法优化核极限学习机的数据回归预测 目录 回归预测 | Matlab实现GSWOA-KELM混合策略改进的鲸鱼优化算法优化核极限学习机的数据回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 GSWOA-KELM多变量回归预测…

ffmpeg解码和渲染理解

ffmpeg解码和渲染理解 ffmpeg视频解码步骤 FFmpeg 是一个功能强大的跨平台多媒体处理工具&#xff0c;包含了音视频编解码、封装/解封装、过滤器等功能。下面是一般情况下使用 FFmpeg 进行视频解码的步骤&#xff1a; 初始化 FFmpeg 库&#xff1a;首先需要初始化 FFmpeg 库&a…

linux系统达梦数据库(安装及操作)

新建 dmdba 用户 注意: 安装前必须创建 dmdba 用户&#xff0c;禁止使用 root 用户安装数据库。 创建用户所在的组&#xff0c;命令如下&#xff1a; groupadd dinstall 创建用户&#xff0c;命令如下&#xff1a; useradd -g dinstall -m -d /home/dmdba -s /bin/bash dmdba 修…

一文彻底搞懂OSI七层模型和TCP/IP四层模型

文章目录 1. OSI七层模型2. TCP/IP四层模型 1. OSI七层模型 OSI&#xff08;Open System Interconnect&#xff09;七层模型是一种将计算机网络通信协议划分为七个不同层次的标准化框架。每一层都负责不同的功能&#xff0c;从物理连接到应用程序的处理。这种模型有助于不同的…

口才提升秘籍:马云的说话之道你也能学会!

口才提升秘籍&#xff1a;马云的说话之道你也能学会&#xff01; 在商界&#xff0c;马云以其卓越的领导才能和出色的口才赢得了广泛的赞誉。他的每一次演讲都充满智慧和力量&#xff0c;不仅激发了员工的斗志&#xff0c;也赢得了合作伙伴的信任。那么&#xff0c;马云是如何…

ctf杂项总结

1.文件无法打开 1.1.文件拓展名损坏/错误导致 方法&#xff1a; 1.使用kali当中的file命令查看&#xff0c;之后修改为正确的后缀即可 2.通过16进制编辑器打开查看文件头 3.文件头残缺/错误&#xff0c;可以先使用kail当中的file命令查看它的类型&#xff0c;之后再通过 16…

基于springboot实现驾校信息管理系统项目【项目源码+论文说明】

基于springboot实现驾校信息管理系统演示 摘要 随着人们生活水平的不断提高&#xff0c;出行方式多样化&#xff0c;也以私家车为主&#xff0c;那么既然私家车的需求不断增长&#xff0c;那么基于驾校的考核管理也就不断增强&#xff0c;那么业务系统也就慢慢的随之加大。信息…

运维自动化之ansible工具

目录 前言 一、Ansible 工具概述 1、Ansible 功能 2、Ansible 特性 3、Ansible 优缺点 4、Ansible 架构 4.1 Ansible 组成 4.2 Ansible 命令执行来源 二、Ansible 安装和基础用法 1、Ansible 安装 1.1 yum源安装 1.2 使用python编译安装 1.3 Git方式安装 2、Ansib…

2.MongoDB与关系数据库对比

MongoDB的简单操作与比较 与关系数据库对比 MySQL与MongoDB都是开源的常用数据库&#xff0c;但是MySQL是传统的关系型数据库&#xff0c;MongoDB则是非关系型数据库&#xff0c;也叫文档型数据库&#xff0c;是一种NoSQL的数据库。它们各有各的优点&#xff0c;来看看他们之…

天地图全国幼儿园数据下载与处理分析

概述 在看天地图服务资源的时候看到有个“幼儿园”的数据&#xff0c;好奇点开看了下&#xff0c;下载下来数据差看了下&#xff0c;数据质量还不错。本篇文章给大家分享一下这个数据的处理以及一些简单的统计分析结果。 数据下载 通过地址https://service.tianditu.gov.cn/…

Flutter 多语言、主题切换之GetX库

多语言、主题切换之GetX库 前言正文一、配置项目二、模拟UI三、语言配置① 常量键② 语言配置文件③ 配置 四、持久化五、切换语言① my_home.dart② home.dart③ mine_controller.dart④ language_setting_controller.dart⑤ language_setting.dart⑥ mine.dart 六、切换主题①…

流水账-20240314

目录 Linux系统删除文件后&#xff0c;磁盘大小没变化mysql事务和neo4j事务冲突误诊描述解决方法网上提供的方法重置Neo4j密码&#xff0c;成功解决问题高版本低版本 Linux系统删除文件后&#xff0c;磁盘大小没变化 lsof L1|grep 删除的文件名kill进程 mysql事务和neo4j事务…

VC-旅游系统-213-(代码+说明)

转载地址: http://www.3q2008.com/soft/search.asp?keyword旅游系统 旅游信息管理系统开题报告 一、研究目的 旅游信息管理系统能帮助旅行社在游客的市场开拓、游客的信息管理、客户服务等方面进行综合处理。使旅行社能够准确的掌握客户的市场动态&#xff0c;充分了解对客户…

高等数学相关知识点整理汇总

说明&#xff1a;由于工作原因可能更新不及时&#xff0c;内容逐步完善中… 一、空间解析几何与向量代数 二、多元函数的微分学 三、重积分 四、曲线积分与曲面积分 五、常微分方程 六、无穷级数