qt QMainWindow详解

news2024/10/27 9:56:56

一、概述

QMainWindow继承自QWidget,并提供了一个预定义的布局,将窗口分成了菜单栏、工具栏、状态栏和中央部件区域。这些区域共同构成了一个功能丰富的主窗口,使得应用程序的开发更加简单和高效。

二、QMainWindow的常用组件及功能

  1. 菜单栏(QMenuBar)

    • 位于主窗口顶部,主窗口标题栏下面。
    • 一个主窗口最多只有一个菜单栏。
    • 可以使用QMainWindow类的menubar()函数获取主窗口菜单栏指针,并添加菜单和菜单项。
    • 菜单项是通过QAction类来抽象表示的,QAction类不仅可以用于菜单,还可以用于工具栏和快捷键等。
  2. 工具栏(QToolBar)

    • 主窗口可以包含一个或多个工具栏,用于放置常用操作的快捷按钮。
    • 使用addToolBar()方法将工具栏添加到主窗口。
    • 工具栏中的按钮可以绑定特定的操作,方便用户进行快速操作。
    • 工具栏是一个可移动的窗口,其停靠区域由QToolBar的allowAreas属性决定,包括左侧、右侧、顶部和底部等。
  3. 状态栏(QStatusBar)

    • 位于主窗口底部,用于显示应用程序的状态信息。
    • 使用statusBar()方法获取状态栏对象,并通过showMessage()方法显示文本消息。
    • 状态栏中可以添加小部件,以显示更多的信息或控件。
  4. 中心部件(Central Widget)

    • 中心部件区域是用来放置应用程序的主要内容的部分。
    • 可以包含其他的QWidget或自定义的QWidget派生类。
    • 使用setCentralWidget()方法将中心部件设置为特定的QWidget。
  5. 停靠部件(QDockWidget)

    • 也称浮动窗口,可以有多个。
    • 停靠部件可以在主窗口的边缘停靠,也可以浮动显示。
    • 可以使用addDockWidget()方法将停靠部件添加到主窗口中,并设置其允许停靠的区域。

三、重要方法

  • QMainWindow(QWidget *parent = nullptr):创建一个 QMainWindow 对象,可以指定父对象。
  • setCentralWidget(QWidget *widget):设置主窗口的中央小部件。中央小部件是主窗口的主要内容区域。
  • menuBar():返回主窗口的菜单栏指针。
  • addToolBar(Qt::ToolBarArea area, QToolBar *toolbar):在指定区域添加工具栏。
  • statusBar():返回主窗口的状态栏指针。
  • setWindowTitle(const QString &title):设置窗口标题。
  • setWindowIcon(const QIcon &icon):设置窗口图标。
  • setGeometry(int x, int y, int width, int height):设置窗口的位置和大小。
  • resize(int width, int height):重新设置窗口大小。
  • addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget):添加停靠窗口部件。

#include <QApplication>  
#include <QMainWindow>  
#include <QMenuBar>  
#include <QToolBar>  
#include <QStatusBar>  
#include <QAction>  
#include <QDockWidget>  
#include <QTextEdit>  
#include <QVBoxLayout>  
#include <QLabel>  
  
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);  
    QVBoxLayout *layout = new QVBoxLayout(centralWidget);  
    QLabel *label = new QLabel("Central Widget Content");  
    layout->addWidget(label);  
    mainWindow.setCentralWidget(centralWidget);  
  
    // 创建停靠部件  
    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);  
  
    mainWindow.show();  
    return app.exec();  
}

觉得有帮助的话,打赏一下呗。。

           

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

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

相关文章

【Java网络编程】从套接字(Socket)概念到UDP与TCP套接字编程

目录 网络编程 1.socket套接字 2.udp数据报套接字编程 DatagramSocket API DatagramPacket API Java基于UDP实现客户端-服务器代码实例 3.tcp流套接字编程 ServerSocket API Socket API TCP中的长短连接 Java基于TCP客户端-服务器代码实例 网络编程 1.socket套接字 S…

云对象存储进阶

《使用Minio搭建文件服务器》一文对minio作了简单的介绍&#xff0c;本文为进阶学习。 1.对象存储产品介绍 目前市场上流行各种对象存储服务&#xff0c;诸如以下&#xff1a; Amazon S3&#xff1a;亚马逊提供的服务&#xff0c; 是市场上最成熟的产品&#xff0c;拥有最大的…

ATom:2016-2018 年沿飞行轨迹的 CAM-chem/CESM2 模型输出

目录 简介 摘要 代码 引用 网址推荐 知识星球 机器学习 ATom: CAM-chem/CESM2 Model Outputs Along Flight Tracks, 2016-2018 ATom&#xff1a;2016-2018 年沿飞行轨迹的 CAM-chem/CESM2 模型输出 简介 该数据集包含沿 ATom 飞行轨迹的 CAM-chem&#xff08;带化学的…

[ARM-2D 专题]5 MDK编译器一个旧版本-Ofast优化bug的问题及解决办法

最近开始大量基于ARM-2D开发应用项目&#xff0c;为了达到最佳性能&#xff0c;我们使用了编译器的许多特殊技能&#xff0c;其中就包含了-Ofast优化&#xff0c;很不幸&#xff0c;一不小心踩坑了。 案发情况如下&#xff1a; 使用的MDK版本5.36&#xff0c;编译器6.16 优化选…

在GeoTools中的Shapefile属性表读取效率之Shp与Dbf对比

目录 前言 一、POI测试数据简介 1、选用的POI数据 2、关于数据的属性数据 二、属性数据读取的两种方式实现 1、基于DbaseFileReader的读取 2、基于SimpleFeatureSource的读取 三、实际运行对比 1、内存和CPU占用情况 2、运行耗时情况 四、总结 前言 众所周知&#x…

【深度学习中的注意力机制10】11种主流注意力机制112个创新研究paper+代码——交叉注意力(Cross-Attention)

【深度学习中的注意力机制10】11种主流注意力机制112个创新研究paper代码——交叉注意力&#xff08;Cross-Attention&#xff09; 【深度学习中的注意力机制10】11种主流注意力机制112个创新研究paper代码——交叉注意力&#xff08;Cross-Attention&#xff09; 文章目录 【…

‌Spring MVC的主要组件有哪些?

前言 SpringMVC的核心组件包括DispatcherServlet、Controller、HandlerMapping、HandlerAdapter、ViewResolver、ModelAndView等&#xff0c;它们协同工作以支持基于MVC架构的Web应用程序开发。这些组件使得开发人员能够以一种声明式和模块化的方式构建Web应用程序&#xff0c…

小程序开发实战:PDF转换为图片工具开发

目录 一、开发思路 1.1 申请微信小程序 1.2 编写后端接口 1.3 后端接口部署 1.4 微信小程序前端页面开发 1.5 运行效果 1.6 小程序部署上线 今天给大家分享小程序开发系列&#xff0c;PDF转换为图片工具的开发实战&#xff0c;感兴趣的朋友可以一起来学习一下&#xff01…

ECharts饼图-基础南丁格尔玫瑰图,附视频讲解与代码下载

引言&#xff1a; 在数据可视化的世界里&#xff0c;ECharts凭借其丰富的图表类型和强大的配置能力&#xff0c;成为了众多开发者的首选。今天&#xff0c;我将带大家一起实现一个饼图图表&#xff0c;通过该图表我们可以直观地展示和分析数据。此外&#xff0c;我还将提供详…

一、在cubemx下RTC配置调试实例测试

一、rtc的时钟有lse提供。 二、选择rtc唤醒与闹钟功能 内部参数介绍 闹钟配置 在配置时间时&#xff0c;注意将时间信息存储起来&#xff0c;防止复位后时间重新配置。 if(HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR0)! 0x55AA)//判断标志位是否配置过&#xff0c;没有则进…

qt EventFilter用途详解

一、概述 EventFilter是QObject类的一个事件过滤器&#xff0c;当使用installEventFilter方法为某个对象安装事件过滤器时&#xff0c;该对象的eventFilter函数就会被调用。通过重写eventFilter方法&#xff0c;开发者可以在事件处理过程中进行拦截和处理&#xff0c;实现对事…

WSL2 Ubuntu22.04编译安装LLVM

前提 这两天因为工作需要&#xff0c;要编译一个Debug版本的llvm。这里对编译安装过程进行一个简单的记录&#xff0c;同时也记录下这个过程中遇到的几个问题。 下载源码并编译 有关llvm编译安装的官方文档在这里。 从git仓库clone llvm的源码。 git clone https://github.c…

FPGA搭建PCIE3.0通信架构简单读写测试,基于XDMA中断模式,提供3套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的PCIE方案本博客方案的PCIE2.0版本 3、PCIE基础知识4、工程详细设计方案工程设计原理框图XDMA配置及使用XDMA中断模块数据缓存架构用户逻辑Windows版本XDMA驱动安装Linux版本XDMA驱动安装测试应用程序工程源码架构PCIE上板…

电磁场-Laplace算子与冲激函数的关系

csdn重新打一遍公式太麻烦了。欢迎转到我的知乎账号上查阅原版文章&#xff0c;也可后台私信我发送原版PDF或者markdown。 电磁场-Laplace算子与冲激函数的关系 - 知乎 下面的文章是一张超大的图片。

论1+2+3+4+... = -1/12 的不同算法

我们熟知自然数全加和&#xff0c; 推导过程如下&#xff0c; 这个解法并不难&#xff0c;非常容易看懂&#xff0c;但是并不容易真正理解。正负交错和无穷项计算&#xff0c;只需要保持方程的形态&#xff0c;就可以“预知”结果。但是这到底说的是什么意思&#xff1f;比如和…

C++扑克牌(poker)2024年CSP-J认证第二轮第一题 CCF信息学奥赛C++ 中小学初级组 第二轮真题解析

目录 C扑克牌&#xff08;poker&#xff09; 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、运行结果 五、考点分析 六、推荐资料 C扑克牌&#xff08;poker&#xff09; 2024年CSP-J认证第二轮第一题 一、题目要求 1、编程实现 小 P 从同学…

HarmonyOS 组件样式@Style 、 @Extend、自定义扩展(AttributeModifier、AttributeUpdater)

1. HarmonyOS Style 、 Extend、自定义扩展&#xff08;AttributeModifier、AttributeUpdater&#xff09; Styles装饰器&#xff1a;定义组件重用样式   ;Extend装饰器&#xff1a;定义扩展组件样式   自定义扩展&#xff1a;AttributeModifier、AttributeUpdater 1.1. 区…

HarmonyOS 5.0应用开发——应用打包HAP、HAR、HSP

【高心星出品】 目录 应用打包HAP、HAR、HSPModule类型HAPHAR创建HAR建立依赖HAR共享内容 HSP创建HSP建立依赖同上HSP共享内容同上 HAR VS HSP 应用打包HAP、HAR、HSP 一个应用通常会包含多种功能&#xff0c;将不同的功能特性按模块来划分和管理是一种良好的设计方式。在开发…

【哈工大_操作系统实验】Lab9 proc文件系统的实现

本节将更新哈工大《操作系统》课程第九个 Lab 实验 proc文件系统的实现。按照实验书要求&#xff0c;介绍了非常详细的实验操作流程&#xff0c;并提供了超级无敌详细的代码注释。 实验目的&#xff1a; 掌握虚拟文件系统的实现原理&#xff1b;实践文件、目录、文件系统等概念…

【C++开篇】

首先初阶的数据结构相信大家已经学习的差不多了&#xff0c;关于初阶数据结构排序的相关内容的总结随后我也会给大家分享出来。C语言和C有许多相同的地方&#xff0c;但也有许多不相同的地方。接下来的C部分&#xff0c;我们主要是针对C与C语言不同的地方来与大家进行分享。其中…