QT基础 - QMainWindow主窗口

目录

零. 简介

一. 菜单栏

二. 工具栏

三. 状态栏

四. 可停靠区域

五. 总结


零. 简介

QMainWindow 是 Qt 中用于构建主窗口的类。

它通常包含以下几个主要部分:

  • 菜单栏:用于提供各种操作选项。
  • 工具栏:放置常用的操作按钮。
  • 中心区域:用于显示主要的内容或控件。
  • 状态栏:用于显示一些状态信息。

QMainWindow 为应用程序提供了一个标准的、功能丰富的主界面框架,方便开发者组织和管理窗口中的各种元素。它可以方便地进行布局管理,添加各种控件和功能组件,以满足不同应用程序的需求。开发者可以通过代码灵活地定制 QMainWindow 的各个部分,实现个性化的用户界面设计和功能实现。例如,可以动态添加或移除菜单项、工具栏按钮,以及在中心区域显示不同的控件或窗口。

一. 菜单栏

QMainWindow的菜单栏是位于主窗口顶部的一个菜单条,其中包含了多个菜单,每个菜单又可以包含多个菜单项。以下是关于QMainWindow菜单栏的详细介绍:

  • 菜单栏的创建:通过调用QMainWindow类的menuBar()函数可以获取主窗口的菜单栏指针。然后,可以使用QMenu类的addMenu()函数添加菜单。
  • 菜单的添加:使用QMenu类的addAction()函数可以向菜单中添加菜单项。QAction类用于表示菜单项或工具栏按钮的动作,可以设置动作的文本、图标、快捷键等属性。
  • 菜单项的点击响应:当用户点击菜单项时,会触发相应的信号。可以通过连接信号和槽函数来处理菜单项的点击事件。
  • 菜单栏的布局:菜单栏的布局可以通过设置菜单的位置和顺序来调整。可以使用QMenu类的insertMenu()函数在指定位置插入菜单,或者使用removeMenu()函数移除菜单。
  • 多级菜单:可以创建多级菜单,即在一个菜单下再添加子菜单,形成层次结构。
  • 快捷键和助记符:可以为菜单项设置快捷键和助记符,方便用户通过键盘操作。
  • 动态菜单:可以根据程序的运行状态动态地添加、修改或删除菜单项。
  • 样式设置:可以通过设置菜单栏和菜单项的样式来美化界面。

通过合理使用菜单栏,可以提供方便的用户操作入口,增强应用程序的功能和易用性。开发者可以根据具体需求创建各种菜单和菜单项,并通过信号与槽机制实现相应的功能。

属性

  • 通常没有特别突出的特定属性。

方法

  • addMenu(QString menuTitle):添加一个新的菜单。
  • addAction(QAction* action):向菜单中添加一个动作。

示例

#include <QApplication>
#include <QMainWindow>
#include <QMenu>
#include <QAction>
#include<QMenuBar>class MyMainWindow : public QMainWindow {
public:MyMainWindow() {QMenuBar *menuBar = this->menuBar();// 文件菜单QMenu *fileMenu = new QMenu("文件", this);menuBar->addMenu(fileMenu);QAction *newFileAction = new QAction("新建文件", this);fileMenu->addAction(newFileAction);QAction *openFileAction = new QAction("打开文件", this);fileMenu->addAction(openFileAction);// 编辑菜单QMenu *editMenu = new QMenu("编辑", this);menuBar->addMenu(editMenu);QAction *cutAction = new QAction("剪切", this);editMenu->addAction(cutAction);QAction *copyAction = new QAction("复制", this);editMenu->addAction(copyAction);QAction *pasteAction = new QAction("粘贴", this);editMenu->addAction(pasteAction);// 视图菜单QMenu *viewMenu = new QMenu("视图", this);menuBar->addMenu(viewMenu);QAction *zoomInAction = new QAction("放大", this);viewMenu->addAction(zoomInAction);QAction *zoomOutAction = new QAction("缩小", this);viewMenu->addAction(zoomOutAction);// 连接一些信号与槽connect(newFileAction, &QAction::triggered, this, [this]() {qDebug() << "点击了新建文件";});connect(openFileAction, &QAction::triggered, this, [this]() {qDebug() << "点击了打开文件";});connect(cutAction, &QAction::triggered, this, [this]() {qDebug() << "点击了剪切";});connect(copyAction, &QAction::triggered, this, [this]() {qDebug() << "点击了复制";});connect(pasteAction, &QAction::triggered, this, [this]() {qDebug() << "点击了粘贴";});connect(zoomInAction, &QAction::triggered, this, [this]() {qDebug() << "点击了放大";});connect(zoomOutAction, &QAction::triggered, this, [this]() {qDebug() << "点击了缩小";});}
};int main(int argc, char *argv[]) {QApplication a(argc, argv);MyMainWindow w;w.show();return a.exec();
}

效果图

二. 工具栏

工具栏是Qt中用于提供快速访问常用操作的界面组件。它通常位于菜单栏下方或窗口的其他位置,可以包含各种按钮、图标和其他控件。

属性

  • orientation:工具栏的方向,可以是水平或垂直。
  • iconSize:工具栏上图标的大小。
  • movable:工具栏是否可移动。
  • Floatable:工具栏是否可浮动。

方法

  • addAction(QAction*):向工具栏添加一个动作。
  • insertAction(QAction*, QAction*):在指定的动作之前插入一个新的动作。
  • removeAction(QAction*):从工具栏中移除一个动作。
  • setOrientation(Qt::Orientation):设置工具栏的方向。
  • setIconSize(QSize):设置工具栏上图标的大小。

示例:

#include <QApplication>
#include <QMainWindow>
#include <QToolBar>
#include <QAction>int main(int argc, char *argv[]) {QApplication a(argc, argv);QMainWindow w;// 创建工具栏QToolBar *toolBar = new QToolBar(&w);// 创建动作QAction *action1 = new QAction("Action 1", &w);QAction *action2 = new QAction("Action 2", &w);// 将动作添加到工具栏toolBar->addAction(action1);toolBar->addAction(action2);// 设置工具栏的位置w.addToolBar(Qt::TopToolBarArea, toolBar);w.show();return a.exec();
}

效果图:

三. 状态栏

Qt 中的状态栏是用于显示应用程序状态信息的区域,通常位于主窗口的底部。

它可以显示各种类型的信息,如实时消息、永久消息和进度条等。

常用属性

  • message():获取当前状态栏显示的消息。
  • isVisible():判断状态栏是否可见。
  • sizeGripEnabled():状态栏右下角的尺寸控制点是否可用。

常用方法

  • showMessage(QString message, int timeout = 0):在状态栏中显示指定的消息,timeout参数表示消息显示的时间(毫秒),默认为 0 表示一直显示。
  • clearMessage():清除状态栏中的消息。
  • addWidget(QWidget * widget, int stretch = 0):向状态栏中添加一个控件,stretch参数表示控件的伸缩比例。
  • removeWidget(QWidget * widget):从状态栏中移除一个控件。

代码示例

#include <QApplication>
#include <QMainWindow>
#include <QStatusBar>
#include <QLabel>int main(int argc, char *argv[]) {QApplication a(argc, argv);QMainWindow w;QStatusBar *statusBar = new QStatusBar(&w);w.setStatusBar(statusBar);// 添加一个文本消息statusBar->showMessage("这是状态栏的消息");// 添加一个标签到状态栏QLabel *label = new QLabel("自定义信息");statusBar->addWidget(label);w.show();return a.exec();
}

效果图:

四. 可停靠区域

可停靠区域(QDockWidget)是 Qt 中的一个窗口部件,用于创建可停靠的窗口,通常用于构建多文档接口(MDI)或可定制的用户界面。QDockWidget 允许用户将窗口停靠在应用程序的主窗口周围,或将其拖动到独立的浮动窗口中。

以下是有关 QDockWidget 的详细介绍和使用方法:

QDockWidget 的主要特点

  • 停靠功能:QDockWidget 允许用户将窗口部件停靠在主窗口的各个位置,如左侧、右侧、上方或下方;
  • 浮动窗口:用户还可以将 QDockWidget 拖动到独立的浮动窗口中;
  • 可关闭:QDockWidget 可以关闭,允许用户根据需要隐藏或显示它;
  • 自定义部件:可以将自定义的部件放在 QDockWidget 中,以构建自定义的界面元素。

常用函数介绍

  • setWidget:设置停靠窗口中的部件;
  • setAllowedAreas:设置允许停靠的区域;
  • setFeatures:设置停靠窗口的功能特性,如关闭按钮、可浮动等;
  • setWindowTitle:设置停靠窗口的标题;
  • setVisible:设置停靠窗口的可见性;
  • isFloating:检查停靠窗口是否在浮动状态;
  • close:关闭停靠窗口;
  • toggleViewAction:获取一个 QAction 对象,用于在工具栏中切换停靠窗口的可见性;
  • topLevelChanged信号:在停靠窗口的浮动状态发生变化时触发

示例:

#include <QApplication>
#include <QMainWindow>
#include <QDockWidget>
#include <QPushButton>int main(int argc, char *argv[]) {QApplication a(argc, argv);QMainWindow mainWindow;QDockWidget *dockWidget1 = new QDockWidget("Dock 1", &mainWindow);QPushButton *button1 = new QPushButton("Button in Dock 1");dockWidget1->setWidget(button1);mainWindow.addDockWidget(Qt::LeftDockWidgetArea, dockWidget1);QDockWidget *dockWidget2 = new QDockWidget("Dock 2", &mainWindow);QPushButton *button2 = new QPushButton("Button in Dock 2");dockWidget2->setWidget(button2);mainWindow.addDockWidget(Qt::RightDockWidgetArea, dockWidget2);mainWindow.show();return a.exec();
}

效果图:

五. 总结

菜单栏

  • 提供了应用程序的主要功能选项,以层次化的菜单结构呈现。
  • 方便用户快速访问各种操作和功能。

工具栏

  • 包含常用操作的快捷按钮,提供了一种直观、快速的交互方式。
  • 可以根据需要定制和排列各种工具按钮。

状态栏

  • 用于显示应用程序的状态信息,如提示消息、当前状态等。
  • 可以动态更新显示的内容。

可停靠区域

  • 允许创建可停靠的窗口部件,可灵活放置在主窗口的不同位置或变为浮动窗口。
  • 增强了界面布局的灵活性和可定制性,方便用户根据需求调整。

总的来说,这几个组件共同构成了 Qt 应用程序丰富多样的用户界面,使得用户交互更加便捷、高效和个性化。它们相互配合,为用户提供了良好的操作体验和功能展示。

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

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

相关文章

搭建Vue的环境

目录 # 开篇 步骤一&#xff0c;准备Vue 的环境 步骤二&#xff0c;下载Vue.js的包 步骤三&#xff0c;创建并打开写前端代码的文件夹 步骤四&#xff0c;在VSCode中引入Vue.js的包 步骤五&#xff0c;创建第一个vue.html Vue其他知识 Vue.config命令 # 开篇 介绍&…

详细分析Element Plus的el-pagination基本知识(附Demo)

目录 前言1. 基本知识2. Demo3. 实战 前言 需求&#xff1a;从无到有做一个分页并且附带分页的导入导出增删改查等功能 前提一定是要先有分页&#xff0c;作为全栈玩家&#xff0c;先在前端部署一个分页的列表 相关后续的功能&#xff0c;是Java&#xff0c;推荐阅读&#x…

数据结构:4.1.2二叉搜索树的插入

整个框架和FInd函数的实现是一样的&#xff0c;但是也有不同&#xff08;注意&#xff09; 35>30 向30的右子树 35<41 向41的左子树 35>33 向33的右子树&#xff0c;但33右边为空&#xff0c;所以35就挂在33的右边 因为要把35挂在33的右边&#xff0c;所以要把33的…

Solkane 冷媒性能计算软件-管路计算

下载 制冷管道设计 制冷管路的压降会降低制冷量&#xff0c;增大功耗。但不同部分的管路允许的压降的数量级是不同的。 制冷管路的压降不是唯一的考虑因素&#xff0c;制冷剂的流速往往比压降更重要。 制冷系统中&#xff0c;压缩机、阀、汽液分离器或其他附件上的连接件的尺…

VSCode 安装NeoVim扩展(详细)

目录 1、安装NeoVim扩展 2、windows安装Neovim软件 3、优化操作相关的配置&#xff1a; 5、Neovim最好的兼容性配置 6、技巧和特点 6.1 故障排除 6.2、Neovim 插件组合键设置 6.3、跳转列表 1、安装NeoVim扩展 在扩展商店搜索NeoVim&#xff0c;安装扩展 2、windows安装…

重学java 77.JDK新特性 ③ Stream流

The road is long,it can be really hard.Whatever you do,you hold on to that foolishly hopeful smile —— 24.6.19 Stream流 stream流中的"流"不是特指"IO流",它是一种"流式编程"(编程方式),可以看做是"流水线 package S109Stream;im…

【Python机器学习实战】 | Lasso回归和弹性网回归详细分析研究

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…

react使用OpenLayers实现类似船某网在地图放大时展示具体船舶符号缩小时显示聚合小点效果

一、效果 如图所示&#xff0c;地图缩小&#xff08;即比例尺放大&#xff09;时&#xff0c;显示聚合小绿点&#xff1b; 地图放大&#xff08;比例尺缩小&#xff09;时&#xff0c;展示具体船舶符号&#xff1a; 二、思路 1&#xff09;设置2个图层&#xff0c;一个展示…

计网重点面试题-TCP三次握手四次挥手

三次握手 第一次握手(syn1) 客户端会随机初始化序号&#xff08;client_isn&#xff09;&#xff0c;将此序号置于 TCP 首部的「序列号」字段中&#xff0c;同时把 SYN 标志位置为 1&#xff0c;表示 SYN 报文。接着把第一个 SYN 报文发送给服务端&#xff0c;表示向服务端发…

Microsoft Edge 查看已保存账号的密码

1、打开更多菜单选项 打开浏览器右上角的“...”设置及其他&#xff0c;快捷键&#xff1a;ALTF。 2、打开设置选项 选择“设置”&#xff0c;快捷键&#xff1a;g 3、点击密码 在“个人资料”选项中找到密码选项 4、电子钱包 电子钱包会显示“站点和应用”所保存的账户信息…

JAVAEE之网络原理(2)_传输控制协议(TCP)的连接管理机制,三次握手、四次挥手,及常见面试题

前言 在上一节中&#xff0c;我们简单介绍了 TCP 协议的相关概念和格式&#xff0c;而且还介绍了TCP 协议原理中的 确认应答机制、超时重传机制&#xff0c;在本节中我们将会继续介绍 TCP协议原理中的其他机制。 连接管理机制&#xff08;安全机制&#xff09; 在正常情况下&…

lvgl的应用:移植MusicPlayer(基于STM32F407)

目录 概述 1 软硬件环境 1.1 UI开发版本 1.2 MCU开发环境 1.3 注意点 2 GUI Guider开发UI 2.1 使用GUI Guider创建UI 2.2 GUI Guider编译项目和测试 2.2.1 GUI Guider编译项目 2.2.2 编译 2.3 了解GUI Guider生成代码 3 移植项目 3.1 Keil中加载代码 3.2 调用G…

漏洞挖掘 | 记一次src挖掘-小程序敏感信息泄露

权当是一次漏洞挖掘的思路分享 闲言 就现在的一个web漏洞挖掘强度还是非常高的&#xff0c;所以我们不妨把我们的眼光投向一个之前可能未曾涉及到的区域———小程序 是的微信小程序&#xff0c;这玩意的防范能力和过滤能力其实对比web方向是要弱小很多的 进入正题 以下就是…

Javase.抽象类和接口

抽象类和接口 【本节目标】1.抽象类1.1抽象类的概念1.2 抽象类语法1.3 抽象类特性1.4 抽象类的作用 2. 接口2.1 接口的概念2.2 语法规则2.3 接口使用2.4 接口特性2.5 实现多个接口2.6 接口间的继承2.7 接口使用实例2.8Clonable 接口和深拷贝2.9 抽象类和接口的区别 3. Object类…

GT_BERT文本分类

目录 GT-BERT结束语代码实现整个项目源码&#xff08;数据集模型&#xff09; GT-BERT 在为了使 BERT 模型能够得到广泛的应用,在保证模型分类准确率不降低的情况下,减少模型参数规模并降低时间复杂度,提出一种基于半监督生成对抗网络与 BERT 的文本分类模型 GT-BERT。模型的整…

【ajax基础04】form-serialize插件

目录 一&#xff1a;form-serialize插件 作用&#xff1a; 语法格式&#xff1a; 一&#xff1a;form-serialize插件 作用&#xff1a; 快速且大量的收集表单元素的值 例如上图对于多表单元素的情形&#xff0c;单靠通过”选择器获取节点.value”值的形式&#xff0c;获取…

使用 GCD 实现属性的多读单写

使用 Grand Central Dispatch (GCD) 实现多读单写的属性 首先需要确保在多线程环境下的线程安全性。可以使用 GCD 提供的读写锁机制 dispatch_rwlock_t 或者 dispatch_queue_t 来实现这个功能。 Swift版本的实现 怎样创建一个并发队列 &#xff1f;// 使用 Swift 来实现的首…

.net 奇葩问题调试经历之1——在红外相机获取温度时异常

📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创📢作者格言:新的征程,我们面对的不仅仅是技术还有人心,人心不可测,海水不可量,唯有技术,才是深沉黑夜中的一座闪烁的灯塔序言 我们在研发中,经常除了造产品…

吉时利Keithley2602B数字源表

吉时利Keithley2602B数字源表 2601B、2602B、2604B 系统 Sourcemeter SMU 仪器 2601B、2602B 和 2604B 系统 Sourcemeter SMU 仪器为 40W DC / 200W 脉冲 SMU&#xff0c;支持 10A 脉冲&#xff0c;3A 至 100fA 和 40V 至 100nV DC。它们将精密电源、实际电流源、6 位数字万用…

使用asyncua模块的call_method方法调用OPC UA的Server端方法报错:asyncio.exceptions.TimeoutError

使用asyncua模块的call_method方法调用OPC UA的Server端方法报错&#xff1a;asyncio.exceptions.TimeoutError 报错信息如下&#xff1a; Traceback (most recent call last): asyncio.run(main()) File “D:\miniconda3\envs\py31013\lib\asyncio\runners.py”, line 44, in…