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

news2024/11/26 1:29:11

目录

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等组件结合使用,创建出丰富和易用的菜单系统。

 

 

 

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

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

相关文章

【React】- 组件生命周期连续渲染两次问题

最近在整理生命周期相关的知识内容,然后发现一个奇怪的现象,即组件的生命周期会运行2次!经过确认不是代码问题,于是开始找度娘,终于找到其原因-React中的严格模式,在这里记录一下 一、问题重现 如图所示&a…

速通matplotlib库

速通matplotlib库 前言 ​ 最近在复习之前学习过的知识点,因此想到把学过的总结一下,方便后面再次复习,所以有了这个系列。 说明 ​ 由于标题写的是“速通”,因此我的想法是可以让大家看完这篇文章,可以上手matplotlib…

WebSocket从入门到精通

WebSocket 是什么? WebSocket是HTML5规范提出的一种协议;目前除了IE浏览器,其他浏览器都基本支持。它是一种协议,万变不离其宗,也是基于TCP协议的,和HTTP协议是并存的两种协议。HTML5 Web Sockets规范定义了…

快速排序算法解析

快速排序算法解析 快速排序法 快速排序是一种经典的分治算法,它采用递归的方式将待排序数组分割成较小的子数组,然后通过基准元素的选择和元素的交换来达到排序的目的。 快速排序的核心思想是通过选取基准元素,并将其他元素与基准元素进行比…

如何在工作中保持稳定的情绪? – 个人看法和建议

文章目录 每日一句正能量前言情绪波动的原因建议情绪调节技巧和策略身处逆境,如何治愈自己 后记 每日一句正能量 所谓的快乐,是指身体的无痛苦和灵魂的无纷扰。——伊壁鸠鲁 前言 在工作中保持稳定的情绪对于每一个职场人来说都是非常重要的。随着工作压…

什么是vlan为什么要划分vlan

首先了解交换机的数据的转发方式。,有两种情况会使用广播方式进行数据分发,第一种就是目的地址是全F的(FF-FF-FF-FF-FF-FF),第二种是位置的单播帧,这样的情况下会带来什么杨的问题呢。 场景引入&#xff1…

Vue2 使用vcolorpicker报错问题解决

1、安装步骤省略 2、全局引入步骤省略 3、引入后注册组件会报如下错误 Failed to mount component: template or render function not defined. 按照文档给的例子直接这样写 不用注册组件就不报错了~

菜鸡shader:L10 帧序列动画和极坐标的使用

文章目录 帧序列动画代码最后效果 极坐标代码最后效果 顶点色 这次笔记就直接放最后的效果了,因为课程上老师也没有给代码图片或是什么技巧说明。 下图左边是帧序列动画(鬼火),右边是极坐标。 帧序列动画 帧序列的原理是对一张有规律行列排序的序列帧…

35. 反转链表

目录 链接: 题目: 思路: 代码: 图片: 链接: 原题链接 题目: 定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。 思考题: 请同时…

逻辑(css)-背景网格制作(linear-gradient)

目录 linear-gradient需求实现 linear-gradient 语法:linear-gradient([direction], color-stop1, color-stop2, ...) 第一个参数为(可选)方向参数,可以是度数也可以是方位名词,方向与读书的关系如下: 角度方位文字说明示例0degto top从下…

centos7 环境下部署 nacos单机模式

1、官网下载 nacos 官网地址:home 去github上下载nacos-server。我下载的是 nacos-server-1.4.1.tar.gz 2、安装 nacos 下载完成后,将安装包上传到 centos 创建 nacos 目录(安装位置任意) mkdir -p /usr/local/nacos解压 nac…

springboot html乱码

一、问题重现 二、代码展示 代码的编码都是正常的 修改了File Encodings配置项,结果不管用 三、终极解决方案 终于解决

MATLAB 基于CPD的点云配准 (24)

MATLAB 基于CPD的点云配准 (24) 一、算法简介二、具体使用1.代码(注释详细)2.函数介绍3.使用技巧4.重复叠加配准效果如何一、算法简介 MATLAB 中包含了一种基于CPD的点云配准方法,这里对其进行使用,查看其配准效果,结果来看如上图所示,还是可用的。 二、具体使用 1.代…

模板类和友元

模板类和友元 非模板友元约束模板友元 非模板友元 友元函数不是模板函数,而是利用模板类参数生成的函数,只能在类内实现。 友元函数访问类的私有变量的方法: 将模板类的引用传递给友元函数: 测试调用: 对于有多个…

Android oom_adj 更新原理(二)

源码基于:Android R 接上一篇:Android oom_adj 更新原理(一) 12. computeOomAdjLocked() frameworks/base/services/core/java/com/android/server/am/OomAdjuster.javaprivate final boolean computeOomAdjLocked(ProcessRecord app, int cachedAdj,Pr…

深入解析Android Lifecycle;从基本使用到源码实现,全面掌握生命周期管理

Lifecycle 是 Android Jetpack 中的一个组件,用于管理 Android 应用组件(如 Activity 和 Fragment)的生命周期。通过使用 Lifecycle,开发者可以更容易地管理组件的生命周期并执行相关的操作。 Lifecycle 提供了一组生命周期事件&…

关于torch.load()更改了cuda位置还是cuda内存不够的问题

关于torch.load()变了cuda位置还是cuda内存不够的问题 问题背景:在一次任务中,由于需要使用cuda进行代码运行,但是分明修改了cuda到一个空闲的卡位置,但是依然抱错cuda out of memory的问题 在任务中,最开始原始代码是…

Node+mysql-注册和登录账号实现(原生)

1.创建数据表 说明:创建id,username,password字段,并设置了类型。 2.导入mysql库 npm i mysql2.18.1 3.创建了db文件夹 说明:创建mysql数据池 // 导入mysql包 const mysqlrequire("mysql") // 创建mysql连接池 const…

react-flow实现dag工作流

1. 官方文档 Introduction to React Flow 2.效果 3. 代码 index.jsx import { useState, useCallback, useEffect } from react; import ReactFlow, {Controls,Background,applyNodeChanges,applyEdgeChanges,addEdge,ReactFlowProvider,useReactFlow } from reactflow;…

C++编程(二)—— 设计模式

文章目录 单例模式饿汉式单例模式懒汉式单例模式懒汉式单例模式2 工厂模式(创建型模式)简单工厂工厂方法抽象工厂总结 单例模式 一个类不管创建多少次多线,永远只能得到该类型一个对象的实例。 A* p1 new A(); A *p2 new A(); A *p3 new…