[QT编程系列-7]:C++图形用户界面编程,QT框架快速入门培训 - 3- QT窗体设计 - 自定义工具栏、状态栏、快捷键、图标

news2024/11/26 21:42:48

目录

3. QT窗体设计

3.2 自定义工具栏

3.2.1 目标

3.2.2 实现过程

3.2 自定义状态栏

3.2.1  目标

3.2.2  过程

3.3 自定义动作快捷键

3.4 自定义图标


3. QT窗体设计

3.2 自定义工具栏

在Qt中,ToolBar(工具栏)是一种常见的GUI元素,用于提供应用程序的常用工具按钮和操作。工具栏通常包含一系列图标按钮,用于执行常见的操作或快速访问功能

以下是在Qt中创建和使用工具栏的一般步骤:

  1. 创建工具栏对象:

    QToolBar* toolBar = new QToolBar(this); // 创建工具栏对象,this为父窗口或父部件
    
  2. 创建工具栏上的工具按钮:

    QAction* openAction = new QAction(QIcon(":/icons/open.png"), tr("打开"), this); // 创建一个工具按钮动作
    QAction* saveAction = new QAction(QIcon(":/icons/save.png"), tr("保存"), this); // 创建另一个工具按钮动作
    // 创建其他工具按钮动作...
    
  3. 将工具按钮添加到工具栏:

    toolBar->addAction(openAction); // 将工具按钮动作添加到工具栏
    toolBar->addAction(saveAction);
    // 添加其他工具按钮动作...
    
  4. 响应工具按钮的信号:

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

    • 如果要将工具栏添加到QMainWindow窗口中,可以使用addToolBar()方法:

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

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

通过上述步骤,你可以创建和使用工具栏来展示常用的工具按钮。创建工具按钮动作,并将其添加到工具栏中。通过连接工具按钮动作的触发信号和槽函数,你可以响应工具按钮的点击事件,执行相应的操作。最后,将工具栏添加到应用程序的窗口或部件中,以显示和使用工具栏。

工具栏通常与Qt的其他组件结合使用,比如菜单栏和状态栏,以提供丰富和易用的用户界面。

3.2.1 目标

3.2.2 实现过程

  

 

 

 

3.2 自定义状态栏

在Qt中,StatusBar(状态栏)是一种常见的GUI元素,用于在应用程序的窗口底部显示即时状态信息、帮助信息、进度指示等。状态栏通常用于提供实时反馈和额外的上下文信息。

以下是在Qt中创建和使用状态栏的一般步骤:

  1. 创建状态栏对象:

    QStatusBar* statusBar = new QStatusBar(this); // 创建状态栏对象,this为父窗口或父部件
    
  2. 设置状态栏的属性:

    statusBar->showMessage(tr("这是状态栏的消息")); // 在状态栏中显示一条消息
    
  3. 将状态栏添加到应用程序的窗口或部件中:

    • 如果要将状态栏添加到QMainWindow窗口中,可以使用setStatusBar()方法:

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

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

通过上述步骤,你可以创建和使用状态栏来显示实时状态信息。你可以使用showMessage()方法在状态栏中显示一条消息,该消息会在一段时间后自动消失。你也可以使用addPermanentWidget()方法在状态栏中添加持久性的小部件,如进度条、按钮等。

状态栏通常与Qt的其他组件结合使用,比如菜单栏、工具栏,以提供更丰富的用户界面和功能。在应用程序的某些操作需要提示用户进度、状态或其他信息时,状态栏是一个非常方便的显示位置。

3.2.1  目标

3.2.2  过程

3.3 自定义动作快捷键

在Qt中,可以通过自定义动作(QAction)来设置快捷键,以提供快速执行操作的功能。

以下是在Qt中自定义动作快捷键的一般步骤:

  1. 创建动作对象:

    QAction* action = new QAction(tr("动作文本"), this); // 创建一个动作
    
  2. 设置动作的快捷键:

    action->setShortcut(QKeySequence(tr("Ctrl+O"))); // 设置动作的快捷键
    
  3. 响应动作的信号:

    connect(action, &QAction::triggered, this, &YourClass::handleAction); // 连接动作的触发信号和槽函数
    

通过上述步骤,你可以创建并设置自定义动作的快捷键。你可以使用setShortcut()方法设置动作的快捷键,采用QKeySequence类表示快捷键组合。快捷键可以包括单个按键、组合键(如Ctrl+Shift+A)或特殊键(如F1、Enter等)。

一旦设置了快捷键,当用户按下相应的键盘按键时,与动作关联的信号将被触发,你可以在槽函数中处理相应的操作。可以使用connect()函数连接动作的triggered信号和槽函数,以实现动作的功能。

自定义动作快捷键可用于增加用户界面的交互性和快速访问操作。你可以在菜单中使用自定义动作,并在相应的菜单项上显示快捷键信息。此外,还可以将自定义动作添加到工具栏或上下文菜单等组件中,方便用户通过快捷键或鼠标点击执行操作。

3.4 自定义图标

在Qt中,可以使用图标(Icon)来为各种组件(如按钮、菜单项、工具栏等)提供可视化的图形表示。

Qt提供了丰富的图标资源,包括内置的图标集以及自定义的图标

以下是在Qt中使用图标的一般步骤:

  1. 使用内置图标:
    Qt提供了一些内置图标,可以直接使用,无需额外的图标文件。

    QIcon icon = QIcon::fromTheme("文件打开"); // 使用内置图标,示例为"文件打开"图标
    
  2. 使用自定义图标:
    如果你有自定义的图标文件,可以将其导入到Qt项目中,并在代码中使用。

    QIcon icon(":/icons/icon.png"); // 使用相对路径或绝对路径指定图标文件
    
  3. 将图标应用于组件:
    可以将图标应用于各种组件,如按钮(QToolButton、QPushButton等)、菜单项(QAction)、工具栏等。

    QPushButton* button = new QPushButton(this); // 创建一个按钮
    button->setIcon(icon); // 设置按钮的图标
    
    QAction* action = new QAction(icon, tr("动作文本"), this); // 创建一个带图标的动作
    

    通过setIcon()方法,你可以将图标应用于相应的组件。

Qt提供了多种图标的尺寸和样式,可以根据需要选择合适的图标尺寸。

在使用图标时,建议选择与所在组件的大小相适应的图标尺寸,以保持良好的视觉效果。

使用图标可以增加应用程序的可视化效果和用户体验,并可以帮助用户快速识别组件的功能或操作。Qt还提供了一些方便的方法,如图标主题(Icon Theme)和SVG图标的支持,使得图标的使用更加灵活和便捷。

 

 

 

 

 

 

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

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

相关文章

【MEX】CF1629 C

Problem - C - Codeforces 题意: 思路: 模拟样例 可以发现做法是对该数列进行分段,当当前mex在后缀没有出现过时,形成一个区间[l,r] 然后有两个问题: 1.mex怎么去维护 2.怎么看mex在后缀有没有出现过 对于第一个…

提高Spark性能的关键:动态资源分配

前言 Spark提供了一种机制,可以根据工作负载动态调整应用程序占用的资源。这意味着,如果不再使用资源,应用程序可能会将资源返还给集群,并在以后有需求时再次请求这些资源。如果Spark集群中有多个应用程序共享资源,则此功能特别有用。 该功能在默认情况下被禁用,并且在…

107-免杀对抗-CC++溯源ShellCode上线混淆变异算法回调编译执行

知识点 #知识点: 1、ShellCode-分析&朔源&感知 2、ShellCode-混淆&编码&算法 3、回调执行解析-API&汇编&句柄#章节点: 编译代码面-ShellCode-混淆 编译代码面-编辑执行器-编写 编译代码面-分离加载器-编写 程序文件面-特征码定…

拖拽示教功能块(含算法介绍和完整SCL ST源代码)

这篇博客介绍简单拖拽示教功能的简单原理,在了解示教功能之前大家需要熟悉运动控制相关的内容,这篇博客我们以脉冲驱动为例介绍,所以大家可以先熟悉下脉冲控制功能块,有关运动控制的相关内容,可以查看运动控制专栏,主要链接如下: SMART PLC和V90伺服实现外部脉冲位置控…

【VUE】解决图片视频加载缓慢/首屏加载白屏的问题

1 问题描述 在 Vue3 项目中,有时候会出现图片视频加载缓慢、首屏加载白屏的问题 2 原因分析 通常是由以下原因导致的: 图片或视频格式不当:如果图片或视频格式选择不当,比如选择了无损压缩格式,可能会导致文件大小过大…

《3.linux应用编程和网络编程-第9部分-3.9.linux网络编程实践》 inet_addr inet_ntop inet_pton htons

3.9.1.linux网络编程框架 3.9.1.1、网络是分层的 (1)OSI 7层模型 : 理论指导,7层 (2)网络为什么要分层 网络太复杂 (3)网络分层的具体表现 我们只研究 APPAPI 3.9.1.2、TCP/IP协议引入 (1)TCP/IP协议是用的最多的网络协议实现 (2)TCP/IP分为4层&#xf…

浙大数据结构第三周之03-树1 树的同构

题目详情: 给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树。而图2就不是同构的…

Python物联网开发-Python_Socket通信开发-Python与Tcp协议物联网设备通信-Socket客户端

一、前言 Python在物联网开发中的重要愈来愈重,因此,掌握Python语言与物联网设备之间的通信就显得尤为重要,可以通过编写Python程序实现获取物联网设备的传感器数值并可以更改物联网设备上的执行器状态。 二、程序实现 首先,当使…

中位数(树状数组+二分)

L-中位数_2023河南萌新联赛第&#xff08;一&#xff09;场&#xff1a;河南农业大学 (nowcoder.com) 树状数组二分 #include <bits/stdc.h> using namespace std; typedef long long ll; const int N2e6; const long long inf 0x7f7f7f7f7f7f7f7f; #define endl \n in…

【Android Framework系列】第5章 AMS启动流程

1 AMS简介 AMS&#xff08;Activity Manager Service&#xff09;是Android中最核心的服务&#xff0c;管理着四大组件的启动、切换、调度及应用进程的管理和调度等工作。AndroidQ将Activity移到了ActivityTaskManagerService中&#xff0c;但也和AMS相关联。 AMS通过使用一些…

【来不及刷题之】44、滑动窗口最小值

暴力方法&#xff1a;超时 class Solution {public int[] maxSlidingWindow(int[] nums, int k) {int nnums.length;int sizen-(k-1);int[] resnew int[size];int slow0,quickk-1;int maxNumfindMax(nums,slow,quick);res[0]maxNum;while (quick<n-1){quick;int addNumnums…

66. 两个链表的第一个公共结点

目录 链接&#xff1a; 题目&#xff1a; 思路&#xff1a; 代码&#xff1a; 图片&#xff1a; 链接&#xff1a; 原题链接 题目&#xff1a; 输入两个链表&#xff0c;找出它们的第一个公共结点。 当不存在公共节点时&#xff0c;返回空节点。 数据范围 链表长度 [1,200…

mapbox跳过accesstoken检测

不写token的时候&#xff0c;控制台就会报这个错 写上token的时候&#xff0c;就会报这个错 然后想让这个错不再出现&#xff0c;就不要再声明mapboxgl.accessToken&#xff0c;并且把node_mudules这个文件夹下面的这个文件里面的红圈内的括号内容改成false。 this._request…

React 安装 报错“Modal不能用作jsx组件”

提示 &#xff1a;‘Modal’ cannot be used as a JSX component. 原因&#xff1a;可能导致是类似antd组件报错 要确认react ts 版本是否适配 解决方法&#xff1a; 第一步&#xff1a;查看代码中的 package.json 文件 查看 typescript 与 types/react 第二步&#xff1a;查…

这些ai图片处理工具就是你神奇的创作伙伴

当我们需要图像来代表某种概念或主题时&#xff0c;我们通常需要花费大量的时间去寻找、编辑、或者设计一张符合要求的图片。但是现在&#xff0c;随着人工智能技术的发展&#xff0c;越来越多的ai自动生成图片软件被开发出来&#xff0c;让我们可以更快捷地获取所需的图像。那…

【Flutter】 Flutter 实现 List Sort 排序 解决复杂业务逻辑下的数据排序问题

文章目录 一、前言二、Flutter 中的 List 排序基础1. Flutter 中的 List 简介2. List 的基本排序方法3. 自定义排序规则 三、在 Flutter 中实现复杂业务逻辑的 List 排序1. 业务逻辑一&#xff1a;根据对象属性排序2. 业务逻辑二&#xff1a;多条件排序 四、完整的 Flutter Lis…

pythonocc进阶学习:faces的inner wire与outer wire

总目录 >> PythonOCC入门进阶到实战(目前已更新入门篇、基础篇和进阶篇) 我们在这篇文章中绘制了带有holes的面&#xff0c; 本篇是在读取到外部文件如brep&#xff0c;igs&#xff0c;stp后获取面的性质&#xff0c;寻找面中的wires的正向与逆向 只显示外wire from O…

TCP/IP参考模型之http协议分层,三次握手、四次挥手

三次握手和四次挥手的过程&#xff1a; 三次握手&#xff1a; TCP建立连接的过程我们称之为3次握手。 &#xff08;1&#xff09;第一次握手 PC1使用一个随机的端口号向PC2的80端口发送连接请求&#xff0c;此过程的典型标志为SYN控制位为1&#xff0c;其他五位为0。 &#x…

credal set 的一些熵

今天看论文的时候看到credal set 的upper entropy [1]&#xff0c;另外作者还给出了一些这个熵的优点。 当然在[2] 里面又变成了缺点。 注意在上一篇博文&#xff0c;credal decision tree的论文里面&#xff0c;作者又推翻了自己的观点&#xff0c;认为这个熵是disaggregat…