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.rhkb.cn/news/354433.html

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

相关文章

气体泄露隐患多,佛山工业可燃气体报警器年检校准来帮忙

在佛山这座工业发达的城市&#xff0c;可燃气体报警器的应用日益广泛&#xff0c;涉及化工、冶金、石油等多个领域。 然而&#xff0c;长时间的使用和恶劣的工业环境可能导致报警器的性能下降&#xff0c;甚至出现误报或漏报的情况。 因此&#xff0c;定期对可燃气体报警器进…

win 打包java项目为exe一键部署,包括mysql和redis

需求&#xff1a;打包springboot项目在win系统下执行&#xff0c;并且要一键部署和开机启动 把所需的程序放在同一个文件夹 1.jdk文件夹&#xff1a;自己去下载&#xff0c;jdk8的话拿jre目录好了 2.mysql文件夹&#xff1a;是8.0.36版&#xff0c;270M精简版了 3.redis文件夹…

Apple - Authorization Services Programming Guide

本文翻译整理自&#xff1a;Authorization Services Programming Guide&#xff08;更新日期&#xff1a;2011-10-19 https://developer.apple.com/library/archive/documentation/Security/Conceptual/authorization_concepts/01introduction/introduction.html#//apple_ref/d…

【JavaEE 进阶(五)】SpringBoot日志

❣博主主页: 33的博客❣ ▶️文章专栏分类:JavaEE◀️ &#x1f69a;我的代码仓库: 33的代码仓库&#x1f69a; &#x1faf5;&#x1faf5;&#x1faf5;关注我带你了解更多进阶知识 目录 1.前言2.日志使用2.1打印日志2.2 门面模式(外观模式)2.3SLF4J框架2.4日志格式说明 3.Sl…

SQL注入-下篇

HTTP注入 一、Referer注入 概述 当你访问一个网站的时候&#xff0c;你的浏览器需要告诉服务器你是从哪个地方访问服务器的。如直接在浏览器器的URL栏输入网址访问网站是没有referer的&#xff0c;需要在一个打开的网站中&#xff0c;点击链接跳转到另一个页面。 Less-19 判…

Elasticsearch 认证模拟题 - 22

一、题目 索引 task 索引中文档的 fielda 字段内容包括了 hello & world&#xff0c;索引后&#xff0c;要求使用 match_phrase query 查询 hello & world 或者 hello and world 都能匹配该文档 1.1 考点 分词器 1.2 答案 # 创建符合条件的 task 索引&#xff0c;…

华为云与AWS负载均衡服务深度对比:性能、成本与可用性

随着云计算的迅速发展&#xff0c;企业对于云服务提供商的选择变得越来越关键。在选择云服务提供商时&#xff0c;负载均衡服务是企业关注的重点之一。我们九河云将深入比较两大知名云服务提供商华为云和AWS的负载均衡服务&#xff0c;从性能、成本和可用性等方面进行对比。 AW…

Blender:渲染输出

一、渲染设置 渲染设置界面&#xff1a; 渲染器选择切换 Cycles渲染器 【文档】 Cycles渲染目标&#xff1a; Cycles是Blender用于产品级渲染&#xff0c;基于物理的路径跟踪器。主要关注于影视质量&#xff0c;更高质量的外观它旨在提供易于使用以及准确的物理渲染结果具有艺术…

Ubuntu服务器搭建Git远程仓库

本文所述方法适用于小型团队在局域网环境中使用Git进行代码版本管理。 1. 安装Git 打开终端(Ctrl + Alt + T) ,输入以下命令: sudo apt update #更新软件包列表信息 sudo apt install git #安装Git 验证Git是否安装成功,可以查看Git版本: git --version 也需…

同三维T80002JEHV H.265高清解码器

同三维T80002JEHV H.265高清解码器 1路HDMI1路VGA解码输出&#xff0c;1/2/4画面分割或16路轮询显示 产品简介&#xff1a; 同三维T80002JEHV解码器使用Linux系统&#xff0c;支持VGA/HDMI二种接口同时输出&#xff0c;支持多流输入多流解码及多屏显示&#xff0c;具有完善的…

NET Core C# 中的Action委托:语法、用法和示例_2024-06-19

Action委托是一个内置的泛型委托类型。此委托使您的程序更具可读性和效率&#xff0c;因为您无需定义自定义委托&#xff0c;如以下示例所示。 它在 System 命名空间下定义。它没有输出参数&#xff0c;输入参数最少为 1 个&#xff0c;最多为 16 个。 Action委托通常用于具有…

【windows|004】BIOS 介绍及不同品牌电脑和服务器进入BIOS设置的方法

&#x1f341;博主简介&#xff1a; &#x1f3c5;云计算领域优质创作者 &#x1f3c5;2022年CSDN新星计划python赛道第一名 &#x1f3c5;2022年CSDN原力计划优质作者 ​ &#x1f3c5;阿里云ACE认证高级工程师 ​ &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社…

Android device/xxx/system/common/overlay编译产物

MTK 如下代码编译的产物在 framework-res.apk 编译配置文件在device/mediatek/system/common/目录下的Android.bp device/mediatek/system/common/overlay/telephony/frameworks/base/core/res/res/values-mcc655-mnc01/config.xml 在Android U上面还在overlay目录中进行了产…

前端框架中的路由(Routing)和前端导航(Front-End Navigation)

聚沙成塔每天进步一点点 本文回顾 ⭐ 专栏简介前端框架中的路由&#xff08;Routing&#xff09;和前端导航&#xff08;Front-End Navigation&#xff09;1. 路由&#xff08;Routing&#xff09;1.1 定义1.2 路由的核心概念1.2.1 路由表&#xff08;Route Table&#xff09;1…

13.3 Go 性能优化

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

LENOVO联想 小新 16 IAH8 2023款(83BG)笔记本原厂Windows11系统,恢复出厂开箱状态预装OEM系统镜像安装包下载

适用型号&#xff1a;小新 16 IAH8【83BG】 链接&#xff1a;https://pan.baidu.com/s/18VbGbBXtQEW5P8wLIyJtAQ?pwddv1s 提取码&#xff1a;dv1s 联想原装Win11系统自带所有驱动、出厂主题壁纸、系统属性联机支持标志、系统属性专属LOGO标志、Office办公软件、联想电脑管家…

Java | Leetcode Java题解之第168题Excel表列名称

题目&#xff1a; 题解&#xff1a; class Solution {public String convertToTitle(int columnNumber) {StringBuffer sb new StringBuffer();while (columnNumber ! 0) {columnNumber--;sb.append((char)(columnNumber % 26 A));columnNumber / 26;}return sb.reverse().t…

读AI新生:破解人机共存密码笔记06人工智能生态系统

1. 深蓝 1.1. “深蓝”的胜利虽然令人印象深刻&#xff0c;但它只是延续了几十年来显而易见的趋势 1.2. 国际象棋算法的基本设计是由克劳德香农在1950年提出的 1.2.1. 这一基本设计在20世纪60年代初实现了重大改进 1.2.2. 最优秀的国际象棋程序的等级评分稳步提高&#xff…

【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【11】ElasticSearch

持续学习&持续更新中… 守破离 【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【11】ElasticSearch 简介基本概念ElasticSearch概念-倒排索引安装基本命令ik 分词器SpringBoot整合测试存储数据&#xff1a;测试复杂检索同步与异步调用 参考 简介 Elasticsearch 是一…

C++ | Leetcode C++题解之第167题两数之和II-输入有序数组

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> twoSum(vector<int>& numbers, int target) {int low 0, high numbers.size() - 1;while (low < high) {int sum numbers[low] numbers[high];if (sum target) {return {low …