[QT编程系列-6]:C++图形用户界面编程,QT框架快速入门培训 - 3- QT窗体设计 - 自定义菜单栏

2023-11-04

目录

3. QT窗体设计

 3.1 自定义菜单

3.1.1 设计目标​编辑

3.1.2 创建过程​编辑

3. QT窗体设计

 3.1 自定义菜单

3.1.1 设计目标

3.1.2 创建过程

在Qt中,Windows窗口和Widget窗口是两种不同的窗口类型,它们在创建方式、功能和用途上有所区别。

  1. 创建方式:

    • Windows窗口是通过Qt的QMainWindow类创建的顶级窗口。通常使用Qt Designer进行可视化设计和布局,然后通过代码或信号槽连接进行定制和交互。
    • Widget窗口是通过Qt的QWidget类创建的窗口。Widget窗口可以作为顶级窗口,也可以嵌套在其他窗口中。
  2. 功能和用途:

    • Windows窗口是用于创建应用程序的主窗口,通常具有常见的窗口功能,如菜单栏、工具栏和状态栏等。它提供了一种常用的界面布局和功能设置
    • Widget窗口是用于创建各种GUI元素的基本窗口,如按钮、标签、列表等。Widget窗口可以由QWidget派生的预定义部件,也可以通过自定义QWidget来创建特定的自定义部件。
  3. 布局管理器:

    • Windows窗口通常使用布局管理器(Layout)来管理其内部部件的位置和大小。常见的布局管理器包括水平布局(QHBoxLayout)、垂直布局(QVBoxLayout)和网格布局(QGridLayout)等。
    • Widget窗口同样可以使用布局管理器来管理其内部部件的布局,以实现灵活的界面设计。

需要注意的是,Windows窗口和Widget窗口并不是严格区分的,可以根据应用程序的需求来选择使用哪种窗口类型或将其组合使用。通常,Windows窗口适用于桌面应用程序的主窗口,而Widget窗口则可以用于创建各种GUI元素,并可以嵌套在Windows窗口中形成复杂的界面

总结来说,Windows窗口是用于创建应用程序主窗口的特殊类型窗口,具有常见的窗口功能和布局机制;Widget窗口则是Qt中最基本的窗口类型,用于创建各种GUI元素,可以嵌套在Windows窗口中形成复杂的界面。视具体需求可以选择适合的窗口类型或将其组合使用,以创建出丰富、灵活的GUI界面。

 

 

Menu Bar(菜单栏)是应用程序窗口中常见的GUI元素,用于提供应用程序的主要菜单项。在Qt中,可以使用QMenuBar类来创建和管理菜单栏。

以下是创建和使用菜单栏的一般步骤:

  1. 创建QMenuBar对象:

    QMenuBar* menuBar = new QMenuBar(this); // 创建菜单栏对象,this为父窗口或父部件
    
  2. 创建菜单项和子菜单:

    QMenu* fileMenu = menuBar->addMenu(tr("File")); // 创建一个菜单项
    QAction* openAction = new QAction(tr("Open"), this); // 创建一个动作
    fileMenu->addAction(openAction); // 将动作添加到菜单项
    // 添加其他菜单项和子菜单...
    
  3. 处理菜单项的动作:

    connect(openAction, &QAction::triggered, this, &YourClass::openFile); // 连接动作的触发信号和槽函数
    
  4. 将菜单栏添加到应用程序的窗口或部件中:

    • 如果要将菜单栏添加到QMainWindow窗口中,可以使用setMenuBar()方法:

      QMainWindow* mainWindow = new QMainWindow(this); // 创建主窗口对象
      mainWindow->setMenuBar(menuBar); // 将菜单栏设置为主窗口的菜单栏
      // 设置其他窗口内容...
      mainWindow->show(); // 显示主窗口
      
    • 如果要将菜单栏添加到其他QWidget部件中,可以借助布局管理器和一个QVBoxLayout或QHBoxLayout:

      QWidget* widget = new QWidget(this); // 创建包含菜单栏的部件对象
      QVBoxLayout* layout = new QVBoxLayout(widget); // 创建垂直布局管理器
      layout->setMenuBar(menuBar); // 将菜单栏添加到布局管理器
      // 设置其他部件内容并添加到布局中...
      widget->show(); // 显示部件
      

通过上述步骤,你可以创建并使用菜单栏来提供应用程序的主要菜单项。你可以创建多个菜单项和子菜单,并为每个菜单项关联动作。当菜单项被选择或触发时,与其关联的动作会触发相应的槽函数,你可以在槽函数中处理具体的操作。最后,将菜单栏添加到应用程序的窗口或部件中,以显示和使用菜单栏。

在Qt中,菜单项是菜单(QMenu)中的每个可选择的选项。菜单项可以包含文本、图标、快捷键等,并与特定操作或功能相关联。在创建菜单项时,可以通过QAction类来实现。

以下是在Qt中创建和使用菜单项的一般步骤:

  1. 创建菜单项:

    QAction* menuItem = new QAction(tr("菜单项文本"), this); // 创建一个菜单项
    
  2. 设置菜单项的属性:

    menuItem->setIcon(QIcon(":/images/icon.png")); // 设置菜单项的图标
    menuItem->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_O)); // 设置菜单项的快捷键
    menuItem->setStatusTip(tr("这是菜单项的提示信息")); // 设置菜单项的状态提示
    
  3. 添加菜单项到菜单:

    QMenu* menu = new QMenu(tr("菜单名称"), this); // 创建一个菜单
    menu->addAction(menuItem); // 将菜单项添加到菜单
    
  4. 响应菜单项的信号:

    connect(menuItem, &QAction::triggered, this, &YourClass::handleMenuItem); // 连接菜单项的触发信号和槽函数
    
  5. 创建菜单的子菜单:

    QMenu* subMenu = menu->addMenu(tr("子菜单名称")); // 创建一个子菜单
    // 向子菜单添加菜单项...
    

通过上述步骤,你可以创建和使用菜单项。可以设置菜单项的各种属性,如图标、快捷键和状态提示,以增加功能和提供更好的用户体验。可以将菜单项添加到一个特定的菜单中,形成一个完整的菜单结构。当菜单项被选择或触发时,与其关联的信号会被触发,你可以在槽函数中处理具体的操作。

需要注意的是,菜单项通常与菜单(QMenu)结合使用,而菜单(QMenu)又可以作为菜单栏(QMenuBar)的子部件。通过创建菜单、添加菜单项以及创建子菜单,你可以构建出丰富的菜单系统来提供各种功能和选项给用户。

在Qt中,Menu Action(菜单动作)是一种特殊类型的动作(QAction),通常用于将动作添加到菜单(QMenu)中。Menu Action提供了在菜单中显示的文本、图标、状态提示、快捷键等属性,并能够与特定的操作或功能相关联。

以下是在Qt中创建和使用Menu Action的一般步骤:

  1. 创建Menu Action:

    QAction* menuAction = new QAction(tr("菜单动作文本"), this); // 创建一个菜单动作
    
  2. 设置Menu Action的属性:

    menuAction->setIcon(QIcon(":/images/icon.png")); // 设置菜单动作的图标
    menuAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_O)); // 设置菜单动作的快捷键
    menuAction->setStatusTip(tr("这是菜单动作的提示信息")); // 设置菜单动作的状态提示
    
  3. 响应Menu Action的信号:

    connect(menuAction, &QAction::triggered, this, &YourClass::handleMenuAction); // 连接菜单动作的触发信号和槽函数
    
  4. 将Menu Action添加到菜单中:

    QMenu* menu = new QMenu(tr("菜单名称"), this); // 创建一个菜单
    menu->addAction(menuAction); // 将菜单动作添加到菜单中
    

通过上述步骤,你可以创建和使用Menu Action。可以设置Menu Action的各种属性,如图标、快捷键和状态提示,以提供更好的用户体验。然后,将Menu Action添加到一个特定的菜单中,使得它在菜单中显示出来。当Menu Action被选中或触发时,与其关联的信号会被触发,你可以在槽函数中处理相应的操作。

在一个菜单中可以添加多个Menu Action,以提供多个选项和操作给用户。Menu Action通常与QMenu和QMenuBar等组件结合使用,创建出丰富和易用的菜单系统。

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[QT编程系列-6]:C++图形用户界面编程,QT框架快速入门培训 - 3- QT窗体设计 - 自定义菜单栏 的相关文章

  • 将 C++ 代码(本机客户端)移植到浏览器(Web 应用程序)

    我有一个使用 Qt creator SDK 编写的 C 模块 我想将此代码移植到任何网页上运行 而不会对最终用户损害源代码 用户应该能够在任何浏览器 Chrome Firefox Safari Explorer 上看到此模块的输出 而无需安
  • Qt 创建者 4.8.4。 Windows 7 - 64 位安装

    我在 QT 方面遇到了一些困难 我需要在学校使用它来完成一些 GUI 应用程序 我最近完成了以下步骤 1 mingw get inst 20120426 exefrom 来源锻造 http sourceforge net projects
  • 在Qt中,如何正确实现委托?

    我遵循模型 视图 控制器范例 我很确定模型和视图是正确的 但我认为我的代表做错了一些事情 一切都 有效 除了第一次单击控件只是 点亮控件 而第二次单击与之交互之外 这是代表通常的实施方式吗 我的实现需要大量的构造和销毁 由scoped pt
  • 如何在Qt3D中优化点云渲染

    我正在尝试使用 Qt3D 显示大型点云 20M pts 我第一次发现这个图书馆https github com MASKOR Qt3DPointcloudRenderer https github com MASKOR Qt3DPointc
  • 在 Windows 上从源代码构建 PhantomJS-2

    我正在尝试基于这些在 Windows 8 1 x64 上从源代码构建 PhantomJS 2 的开发版本指示 https github com ariya phantomjs wiki PhantomJS 2 但是我收到以下错误 mingw
  • 无法将 [未定义] 分配给 QColor

    我正在使用 Qt 5 11 构建 运行代码 代码中有QML风格如下 Button style delegate Component id enabledButtonStyle ButtonStyle padding top 0 paddin
  • MSVC C4100:“应用程序”:未引用的形式参数警告

    使用 MSVC 编译时 以下代码会生成 C4100 警告 这怎么可能 显然引用了 应用程序 class ApplicationInfo public QObject Q OBJECT public static void initializ
  • 在 QtCreator 中调试时如何查看 qDebug 消息

    我正在从 Eclipse CDT 带有 Qt 集成插件 过渡到 QtCreator 2 0 但仍有一件事困扰着我 QtCreator 当我在 QtCreator 中调试时 我在Application output tab直到我停止正在调试的
  • 如何使用bind将成员函数作为函数指针传递?

    我试图将成员函数作为函数指针传递 这样我就不需要依赖单例或全局函数来处理 Qt 5 中的 Qt 消息 据我所知 我的 std function 是正确的类型 它具有正确的签名 并且绑定应该允许我插入隐式this指针 本质上是将成员函数传递为
  • QGraphicsSimpleTextItem“无效使用不完整类型”

    我的代码如下 指针部件 h QGraphicsSimpleTextItem text 指针控件 cpp void PointerWidget placeNumbers float spacing int currentTickNumber
  • qvariant 作为 qhash 中的键

    我想创建一个带有 QVariants 键的数据结构 它看起来像这样 QHash
  • 如何从键盘为 QTableWidget 创建信号?

    我有一张桌子 可以通过左 右 上 下按钮在里面移动 现在 当我停留在某个单元格并按空格键时 我需要创建一个信号 该信号还应该带来该单元格的坐标 我尝试使用 QTableWidget 的标准信号 但它不起作用 我该如何解决这个问题 创建一个单
  • PyQt:使用 alpha 通道创建 QPixmap,而不是预乘颜色通道

    我想创建一个 QPixmap 来使用 QPainter 进行绘制 QPixmap 应支持透明度 而不使用预乘颜色通道 目前 我通过创建具有所需尺寸的 QPixmap 并用每个通道 包括 alpha 设置为零的 QColor 填充它来实现此目
  • Qt:关闭模式对话框关闭程序

    在我的 Qt 程序中 我有 2 个窗口 主窗口和子窗口 在程序中 一次仅显示这些窗口之一 主窗口有一个插槽 用于创建模式对话框 现在 假设子窗口中单击按钮的信号被发送到该插槽 在这种情况下 主窗口隐藏 子窗口可见 对话框显示得很好 但是当对
  • 如何阻止 Qt Creator 将可执行文件放置在“调试”子目录中?

    我正在 Qt Creator 中构建一个项目 虽然我不关心中间 obj 文件去哪里 但重要的是最终的可执行文件应放入 并运行 许多依赖项 DLL 等所在的特定目录中 被发现 因此 在 Qt Creator 中 我选择 Shadow Buil
  • 如何从 ffmpeg 中打开的文件获取流信息?

    我正在尝试使用 ffmpeg 读取视频文件 我有与其旧版本相对应的工作代码 并开始尝试升级到最新的构建版本 将所有这些已弃用的函数替换为其实际的类似函数 但是我遇到了问题 似乎没有检索到任何流 并且视频负载停止在轨道中 这是我正在使用的代码
  • 如何在 PySide/PyQt 中制作一个位于屏幕中央的小部件?

    这段代码有效 但我想知道是否有更简单的方法 def center self qr self frameGeometry cp gui QDesktopWidget availableGeometry center qr moveCenter
  • 通过CMake实现Qt项目

    我正在尝试通过 Cmake 构建并运行非常简单且基本的 Qt 示例 删除 pro 文件 以下是Qt项目的代码 自动生成的Qt项目的目录结构为 Cmake my project name headers mainwindow h source
  • Qt 5.5 QOpenGLWidget 链接错误未链接任何 openGL 调用

    我尝试使用 Qt 5 5 1 构建一个简单的 OpenGL 应用程序 一切都很好 直到我尝试使用 glClearColor 等 openGL 本机函数调用 该小部件实际上编译并产生黑屏 但在我尝试使用任何 openGL 本机函数后 它甚至不
  • 如何在 QT 安装程序框架中区分每用户安装与系统范围安装?

    我正在使用一些名为 pgModeler 的应用程序 它的当前版本提供了一个基于 QT 安装程序框架的安装程序 Windows 上该安装程序的问题是它安装每个用户的开始菜单条目 https github com pgmodeler pgmod

随机推荐

  • AI三大主义:符号主义、联结主义、行为主义

    一 符号主义 symbolicism 符号主义 symbolicism 逻辑主义 Logicism 心理学派 Psychlogism 计算机学派 Computerism 其原理主要为物理符号系统 即符号操作系统 假设和有限合理性原理 早期的
  • 【C#基础详解】(十四)面向对象 继承

    面向过程 优点 性能比面向对象高 因为类调用时需要实例化 开销比较大 比较消耗资源 比如单片机 嵌入式开发 Linux Unix等一般采用面向过程开发 性能是最重要的因素 缺点 没有面向对象易维护 易复用 易扩展 面向对象 面向对象的三个核
  • Zabbix安装时出现缺少PHP模块,解决过程

    我在安装时PHP缺少gettext模块和bcmath模块 一下为解决步骤 1 进入到PHP源码包目录下的ext目录 cd soft php 5 3 13 ext 2 会看到ext目录下有gettext目录和bcmath目录 3 进入gett
  • 对称二叉树

    这是蒟蒻认真写的第一篇题解 如有欠缺 请理解 题目描述 一棵有点权的有根树如果满足以下条件 则被轩轩称为对称二叉树 1 二叉树 2 将这棵树所有节点的左右子树交换 新树和原树对应位置的结构相同且点权相等 下图中节点内的数字为权值 节点外的
  • 下载google code中源码的几个工具

    Google code 一般以三种命令行方式提供源代码 格式如下 plain view plain copy hg clone https code google com p xxx git clone https code google
  • redis中批量删除key

    1 删除所有的key 可以使用redis自身的命令 flushdb 删除当前数据库中的所有Key flushall 删除所有数据库中的key 2 使用linux中的xargs来删除所有的key redis cli keys xargs re
  • 【R】【线性回归分析实验】

    文章目录 实验思维导图 1 收集 探索和准备数据 1 1 收集数据 1 2 探索和准备数据 2 基于数据训练模型 2 1 使用线性回归函数 2 2 建立模型 3 评估模型的性能 4 提高模型的性能 4 1 将年龄非线性化 4 2 数值转换二
  • 愉快地使用你的 Git Bash 工具

    在windows下使用git时自然会用到Git Bash 下面我分享一些Git Bash的使用技巧 欢迎补充 官方下载地址 http msysgit github io 设置初始路径 默认的 Git Bash 初始路径为安装目录 每次打开都
  • mvc三层架构

    三层架构是指 视图层View 业务逻辑层Service 持久层DAO View层 用于接收用户提交请求的代码 Service层 系统的业务逻辑主要在这里完成 DAO层 直接操作数据库的代码 主要是做数据持久层的工作 扩展 MVC指MVC模式
  • MySql 及MyBatis数据的批量操作

    1 Mybatis操作 1 批量更新
  • python hashlib_python import hashlib出现问题

    import hashlib时出现如下问题 gt gt gt import hashlib ERROR root code for hash md5 was not found Traceback most recent call last
  • ubuntu安装向日葵报错 处理时遇到错误:/var/cache/apt/archives/apport_2.20.1-0ubuntu2.4_all.deb

    执行安装命令 sudo dpkg i sunloginclient deb后 可能会报错 在处理时有错误发生 sunloginclient 此时执行 sudo apt get install f y 然后重新安装即可 但按以上方法操作后不一
  • RSA进阶之维纳攻击(wiener-attack )

    维纳攻击 场景 e很大 例题 第七届山东网络安全技能大赛 链接 https pan baidu com s 1IRInw3pB7SQfp3MxRJW17A 提取码 lcn3 e很大 妥了 维纳攻击 脚本在github上 https gith
  • 【完全开源】小安派-DSL 屏幕驱动开发板

    文章目录 概述 系统框图 2 8 3 5寸 屏电路 2 4寸触摸屏电路 1 28 寸圆形触摸屏电路 背光控制 关于Demo 1 28寸圆形屏智能手表Demo 2 4寸屏音乐播放器Demo 3 5寸屏天气站Demo 完全开源 概述 小安派 D
  • Altium Designer导入元器件3D封装

    一 前言 AD用了也有几年了 一开始只是单独用于制版 没有别的用途 随着工龄的增长 需求的内容也是越来越多 逐渐接触了3D模型建立 结构设计 有时需要导入PCB 3D效果 发现PCB导出的大多数只有芯片和电阻电容 很多开关 端子等特殊封装的
  • 前端开发利器: Bootstrap + AngularJS

    概述 在HTML5盛行的互联网时代 涌现诸多的前端html css js框架 基于其 适用范围 licence 发展前景等因素 本人对比总结出其中的两个佼佼者 分别是侧重页面美化展现的 Bootstrap 和侧重页面逻辑控制的 Angula
  • LeetCode题目笔记--2.两数相加

    这个博客系列记录我刷LeetCode过程中的一些循序渐进的思路和想法 希望能坚持下去 如果读者老爷觉得有帮助 就点个赞吧 题目描述 给出两个 非空 的链表用来表示两个非负的整数 其中 它们各自的位数是按照 逆序 的方式存储的 并且它们的每个
  • 数据导入hudi报错,错将字段写到hdfs路径上

    报错信息 Error trying to save partition metadata this is okay as long as atleast 1 of these succced file qiche hudi table 冬天
  • 2020无人用的邮箱和密码大全_Amazon后台登录密码错误!如何辨别账号是否被冻结?...

    啊你绝对不知道 这里每天都会更新一些跨境电商实时动态 卖家经验交流 跨境平台动态研究 曝光销售技巧 转化技巧 站外引流的方法 亚马逊后台登录密码错误 如何辨别账号是否被冻结 很多人一看到自己账号登录不进去就开始心慌 因为2018年就因为亚马
  • [QT编程系列-6]:C++图形用户界面编程,QT框架快速入门培训 - 3- QT窗体设计 - 自定义菜单栏

    目录 3 QT窗体设计 3 1 自定义菜单 3 1 1 设计目标 编辑 3 1 2 创建过程 编辑 3 QT窗体设计 3 1 自定义菜单 3 1 1 设计目标 3 1 2 创建过程 在Qt中 Windows窗口和Widget窗口是两种不同的