QT基础教学(QMainWindow)

文章目录

  • 前言
  • 一、QMainWindow介绍
  • 二、代码示例
  • 三、QMainWindow高级用法
  • 总结


前言

之前我们都是在QWidget中来进行学习的,那么今天我将为大家讲解一下QMainWindow。

一、QMainWindow介绍

QMainWindow是Qt框架提供的一个重要的窗口类,用于创建具有标准应用程序布局的主窗口。它提供了一些常见的功能,如菜单栏、工具栏、状态栏和中央部件区域,可以方便地进行应用程序的组织和布局。下面是QMainWindow的一些特点和常用组件:

1.主窗口特点:

QMainWindow继承自QWidget,并提供了一个预定义的布局,将窗口分成了菜单栏、工具栏、状态栏和中央部件区域。
主窗口具有一个顶级窗口的外观,可以包含其他控件和布局。

2.菜单栏和菜单:

QMainWindow具有一个预定义的菜单栏(QMenuBar),可以用于创建应用程序的多级菜单结构。
可以使用QMenuBar的addMenu()方法添加菜单(QMenu)。
在QMenu中,可以添加菜单项(QAction)和子菜单(QMenu)。

3.工具栏:

QMainWindow可以包含一个或多个工具栏(QToolBar),用于放置常用操作的快捷按钮。
可以使用addToolBar()方法将工具栏添加到主窗口。
工具栏中的按钮可以绑定特定的操作,方便用户进行快速操作。

4.状态栏:

QMainWindow具有一个预定义的状态栏(QStatusBar),用于显示应用程序的状态信息。
可以使用statusBar()方法获取状态栏对象,并通过showMessage()方法显示文本消息。

5.中央部件区域:

QMainWindow的中央部件区域(central widget)是用来放置应用程序的主要内容的部分,可以包含其他的QWidget或自定义的QWidget派生类。
可以使用setCentralWidget()方法将中央部件设置为特定的QWidget。

QMainWindow提供了一个功能丰富的主窗口,方便创建具有标准布局的应用程序。它集成了菜单栏、工具栏、状态栏和中央部件区域,使得应用程序开发更加简单和高效。可以根据应用程序的需求,灵活地使用这些组件来设计和布局主窗口的界面。

在这里插入图片描述
在这里插入图片描述

二、代码示例

当我们使用Qt编写一个简单的QMainWindow示例时,以下是一个基本的代码示例:

#include <QApplication>
#include <QMainWindow>
#include <QMenuBar>
#include <QMenu>
#include <QToolBar>
#include <QStatusBar>
#include <QAction>int main(int argc, char *argv[]) {QApplication app(argc, argv);QMainWindow mainWindow;mainWindow.setWindowTitle("QMainWindow Example");// 创建菜单栏和菜单QMenuBar *menuBar = mainWindow.menuBar();QMenu *fileMenu = menuBar->addMenu("File");// 创建菜单项QAction *openAction = fileMenu->addAction("Open");QAction *saveAction = fileMenu->addAction("Save");// 创建工具栏QToolBar *toolBar = mainWindow.addToolBar("Toolbar");toolBar->addAction(openAction);toolBar->addAction(saveAction);// 创建状态栏QStatusBar *statusBar = mainWindow.statusBar();statusBar->showMessage("Ready");// 创建中央部件QWidget *centralWidget = new QWidget(&mainWindow);mainWindow.setCentralWidget(centralWidget);mainWindow.show();return app.exec();
}

运行结果:

在这里插入图片描述

三、QMainWindow高级用法

1.自定义工具栏:您可以通过在工具栏上添加自定义的QAction来自定义工具栏的外观和功能。例如,您可以添加自定义按钮、分隔符和其他控件,以及定义与它们相关联的操作。

2.Dock窗口:QMainWindow支持将QDockWidget添加到其中,以创建可停靠的子窗口。Dock窗口可以在主窗口的边缘停靠,可以折叠、隐藏和重新排列。这对于创建具有可自定义布局和容器的复杂界面非常有用。

3.多文档接口(MDI):如果您的应用程序需要支持多个文档界面,QMainWindow提供了QMdiArea和QMdiSubWindow来实现多文档接口。您可以在QMdiArea中创建和管理多个子窗口,每个子窗口可以显示不同的文档内容。

4.其他布局:除了中央部件,QMainWindow还支持在其他位置添加QWidget部件,例如左侧、右侧、顶部或底部布局。您可以使用QVBoxLayout、QHBoxLayout或其他布局管理器来管理这些部件的位置和大小。

5.快捷键和动作:QMainWindow允许您为菜单项、工具栏按钮和其他控件定义快捷键和操作。您可以通过设置QAction的快捷键和信号-槽连接来实现用户与应用程序的交互。

#include <QApplication>
#include <QMainWindow>
#include <QMenuBar>
#include <QToolBar>
#include <QStatusBar>
#include <QAction>
#include <QDockWidget>
#include <QMdiArea>
#include <QMdiSubWindow>
#include <QVBoxLayout>
#include <QLabel>int main(int argc, char *argv[]) {QApplication app(argc, argv);QMainWindow mainWindow;mainWindow.setWindowTitle("QMainWindow Advanced Example");// 创建菜单栏和菜单QMenuBar *menuBar = mainWindow.menuBar();QMenu *fileMenu = menuBar->addMenu("File");QAction *openAction = fileMenu->addAction("Open");QAction *saveAction = fileMenu->addAction("Save");// 创建工具栏QToolBar *toolBar = mainWindow.addToolBar("Toolbar");toolBar->addAction(openAction);toolBar->addAction(saveAction);// 创建状态栏QStatusBar *statusBar = mainWindow.statusBar();statusBar->showMessage("Ready");// 创建中央部件QWidget *centralWidget = new QWidget(&mainWindow);QVBoxLayout *layout = new QVBoxLayout(centralWidget);QLabel *label = new QLabel("Central Widget Content");layout->addWidget(label);mainWindow.setCentralWidget(centralWidget);// 创建Dock窗口QDockWidget *dockWidget = new QDockWidget("Dock Window", &mainWindow);dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);QLabel *dockLabel = new QLabel("Dock Window Content");dockWidget->setWidget(dockLabel);mainWindow.addDockWidget(Qt::LeftDockWidgetArea, dockWidget);// 创建MDI区域和子窗口QMdiArea *mdiArea = new QMdiArea(&mainWindow);mainWindow.setCentralWidget(mdiArea);QMdiSubWindow *subWindow1 = new QMdiSubWindow;subWindow1->setWidget(new QLabel("MDI SubWindow 1"));mdiArea->addSubWindow(subWindow1);QMdiSubWindow *subWindow2 = new QMdiSubWindow;subWindow2->setWidget(new QLabel("MDI SubWindow 2"));mdiArea->addSubWindow(subWindow2);mainWindow.show();return app.exec();
}

1.创建Dock窗口:通过创建QDockWidget并将其添加到QMainWindow,我们创建了一个可停靠的子窗口,其中包含一个QLabel部件作为内容。

2.使用多文档接口(MDI):通过创建QMdiArea作为中央部件,并创建多个QMdiSubWindow,我们实现了多文档的界面。每个QMdiSubWindow包含一个QLabel作为内容。

运行效果:

在这里插入图片描述

总结

本篇文章就讲解到这里,下篇文章我将带大家继续学习QT。

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

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

相关文章

c语言输出杨辉三角

#include<stdio.h> int main() {int x 0; //表示杨辉三角的的大小int y 1;printf("请输入x的值: ");scanf("%d", &x);for (int i 0; i < x; i) {for (int j 0; j < i; j) {if (j 0 || i 0) {y 1;}else {y y * (i - j 1) / j;}pri…

c#动态保留小数位数的数值格式化方法实例----从小数点后非零数字保留两位进行四舍五入

c#动态保留小数位数的数值格式化方法实例----从小数点后非零数字保留两位进行四舍五入 1、功能介绍2、代码案例3、输出结果4、封装扩展方法5、控制台调用 6、其他方法地址 1、功能介绍 1. 输入的数字是整数&#xff0c;则直接返回整数部分的字符串表示。 2. 如果输入的数字是…

SpringBoot集成Apache RocketMQ详解

文章目录 0. 前言1. Spring Boot 集成Apache RocketMQ详细步骤1.1.添加依赖1.2.配置RocketMQ1.3.创建消息生产者&#xff08;Producer&#xff09;1.4.创建消息消费者&#xff08;Consumer&#xff09; 2. 测试验证3. 常见报错4. 参考文档5. 源码地址 0. 前言 上个章节我们学习…

4G版本云音响设置教程腾讯云平台版本

文章目录 4G本云音响设置教程介绍一、申请设备三元素1.腾讯云物联网平台2.创建产品3.设置产品参数4.添加设备5.获取三元素 二、设置设备三元素1.打开MQTTConfigTools2.计算MQTT参数3.使用USB连接设备4.设置参数 三、腾讯云物联网套件协议使用说明1.推送协议信息2.topic规则说明…

JDK16特性

文章目录 一、JAVA16概述二、语法层面变化1.密封类&#xff08;第二次预览&#xff09;2.instanceof 的模式匹配3.记录类习惯4基于值的类的警告 三、API层面变化1 Vector API&#xff08;孵化器&#xff09; 四、其他变化1.启用 C14 语言功能2.从 Mercurial 迁移到 Git3.ZGC&am…

Microsoft Excel 101 简介

什么是 Microsoft Excel&#xff1f; Microsoft Excel 是一个电子表格程序&#xff0c;用于记录和分析数值数据。 将电子表格想像成构成表格的列和行的集合。 字母通常分配给列&#xff0c;数字通常分配给行。 列和行相交的点称为像元。 单元格的地址由代表列的字母和代表行的…

【C++】LeetCode 160 相交链表

今天再写一道算法题&#xff08;这两周都写算法题有点摆烂&#xff09; 题目 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1…

安防监控/视频汇聚/云存储/AI智能视频分析平台EasyCVR下级海康设备无法级联是什么原因?

安防视频监控平台/视频集中存储/云存储/磁盘阵列EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。 有用户反馈&…

[JAVAee]spring-Bean对象的执行流程与生命周期

执行流程 spring中Bean对象的执行流程大致分为四步: 启动Spring容器实例化Bean对象Bean对象注册到Spring容器中将Bean对象装配到所需的类中 ①启动Spring容器,在main方法中获取spring上下文对象并配备spring. import demo.*;import org.springframework.context.Applicati…

pt26django教程

admin 后台数据库管理 django 提供了比较完善的后台管理数据库的接口&#xff0c;可供开发过程中调用和测试使用 django 会搜集所有已注册的模型类&#xff0c;为这些模型类提拱数据管理界面&#xff0c;供开发者使用 创建后台管理帐号: [rootvm mysite2]# python3 manage.…

LeetCode 753. 破解保险箱【欧拉回路,DFS】困难

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…

如何从第一性原则的原理分解数学问题

如何从第一性原则的原理分解数学问题 摘要&#xff1a;牛津大学入学考试题目展示了所有优秀数学家都使用的系统的第一原则推理&#xff0c;而GPT4仍然在这方面有困难 作者&#xff1a;Keith McNulty 我们中的许多人都熟悉直角三角形的边的规则。根据毕达哥拉斯定理&#xff0c;…

2023年墨西哥 SP/BMV IPC 研究报告

第一章 指数概况 1.1 指数基本情况 墨西哥 S&P/BMV IPC 指数衡量在墨西哥证券交易所 (Bolsa Mexicana de Valores, BMV)上市&#xff0c;规模最大、流动性最高的股票表现。提供一个覆盖墨西哥股市的广泛、具有代表性且可轻易复制的指数。根据多元化要求&#xff0c;按市值…

【深度学习】 Python 和 NumPy 系列教程(廿五):Matplotlib详解:3、多子图和布局:subplot()函数

目录 一、前言 二、实验环境 三、Matplotlib详解 1、2d绘图类型 2、3d绘图类型 3、多子图和布局 1. subplot()函数 简单示例 一、前言 Python是一种高级编程语言&#xff0c;由Guido van Rossum于1991年创建。它以简洁、易读的语法而闻名&#xff0c;并且具有强大的功能…

多表查询——“MySQL数据库”

各位CSDN的uu们好呀&#xff0c;今天&#xff0c;小雅兰的内容是MySQL数据库中的多表查询啦&#xff0c;这个内容确实是一个难点&#xff0c;下面&#xff0c;让我们进入多表查询的世界吧&#xff01;&#xff01;&#xff01; 一个案例引发的多表连接 多表查询分类讲解 SQL9…

精品SpringCloud的高校招生信息管理系统-微服务分布式

《[含文档PPT源码等]精品基于SpringCloud实现的高校招生信息管理系统-微服务-分布式》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等 软件开发环境及开发工具&#xff1a; 开发语言&#xff1a;Java 框架&#xff1a;springcloud JDK版本&#x…

FL Studio v21.1.1.3750 Producer Edition inc crack官方中文免费激活版功能介绍及百度网盘下载

FL Studio v21.1.1.3750 Producer Edition inc crack官方中文免费激活版是一款功能强大的软件音乐制作环境或数字音频工作站&#xff08;DAW&#xff09;。它代表了25多年的创新发展&#xff0c;在一个软件包中拥有您所需的一切&#xff0c;以创作、编排、录制、编辑、混音和掌…

Linux命令200例:dip用于用户与远程主机建立通信连接

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌。CSDN专家博主&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0…

主题教育活动知识竞赛小程序界面分享

主题教育活动知识竞赛小程序界面分享

微服务保护-授权规则

个人名片&#xff1a; 博主&#xff1a;酒徒ᝰ. 个人简介&#xff1a;沉醉在酒中&#xff0c;借着一股酒劲&#xff0c;去拼搏一个未来。 本篇励志&#xff1a;三人行&#xff0c;必有我师焉。 本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》&#xff0c;SpringCloud…