Qt (10)【Qt窗口 —— 如何在窗口中创建浮动窗口和状态栏】

embedded/2024/9/20 3:32:18/ 标签: qt, 数据库, 系统架构

阅读导航

  • 引言
  • 一、如何在窗口中创建浮动窗口
    • 1. 浮动窗口的创建
    • 2. 设置停靠的位置
  • 二、如何在窗口中创建状态栏
    • 1. 状态栏的创建
    • 2. 在状态栏中显示实时消息
    • 3. 在状态栏中显示永久消息
    • 4. 调整显示消息的位置,并加上进度条

引言

在上一篇文章中,我们一同探索了Qt窗口设计中的精髓,特别是如何巧妙地构建菜单栏与工具栏,为应用程序的用户界面增添了层次感和易用性。这些元素不仅提升了用户交互的效率,也极大地丰富了应用程序的功能展现。今天,我们将继续深化Qt窗口管理的探索之旅,聚焦于一个同样重要且实用的主题——如何在Qt窗口中创建浮动窗口以及状态栏。

一、如何在窗口中创建浮动窗口

在Qt框架中,浮动窗口通常也被称为可停靠窗口(Dock Widgets),它们通过QDockWidget类来实现其浮动和停靠的特性。QDockWidget提供了一种灵活的方式,使得窗口能够围绕主窗口(或核心部件)的边缘停靠,同时也支持脱离主窗口成为独立的浮动窗口。一个应用程序中可以包含多个QDockWidget实例,它们可以根据用户的需要进行停靠、浮动或隐藏,从而提供丰富的界面布局选项和增强的用户体验。

在这里插入图片描述

1. 浮动窗口的创建

浮动窗口的创建是通过QDockWidget类提供的构造函数QDockWidget()来动态实现的。示例如下:

// 浮动窗口  
QDockWidget *dockwidget = new QDockWidget("浮动窗口", this);  
// 将浮动窗口置于当前窗口中  
addDockWidget(Qt::BottomDockWidgetArea, dockwidget);

2. 设置停靠的位置

浮动窗口是位于中心部件周围的可停靠部件,其停靠位置可以通过QDockWidget类中的setAllowedAreas()函数进行设置。该函数允许您指定浮动窗口可以停靠的区域,包括以下几个选项:

  • Qt::LeftDockWidgetArea:停靠在左侧。
  • Qt::RightDockWidgetArea:停靠在右侧。
  • Qt::TopDockWidgetArea:停靠在顶部。
  • Qt::BottomDockWidgetArea:停靠在底部。
  • Qt::AllDockWidgetAreas:以上四个位置均可停靠。

示例如下:如果您想设置浮动窗口只允许停靠在顶部和底部,可以这样做:

QDockWidget *dockWidget = new QDockWidget("示例浮动窗口", this);
//设置浮动窗口的停靠区域,只允许上下停靠
dockWidget->setAllowedAreas(Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea);

二、如何在窗口中创建状态栏

状态栏是应用程序中一个重要的组成部分,用于在主窗口的最底部区域输出简要的信息给用户。每个窗口通常仅包含一个状态栏,以集中展示与当前操作或程序状态相关的关键信息。在Qt框架中,状态栏的实现依赖于QStatusBar类,它提供了一套丰富的接口来管理和展示不同类型的信息。
在这里插入图片描述
在这里插入图片描述
QStatusBar支持显示多种类型的消息,以满足不同场景下的需求:

  • 实时消息:这类消息通常用于反映当前程序的运行状态或用户的即时操作反馈,如“正在加载数据…”或“文件已成功保存”。实时消息可能会根据程序的执行流程或用户交互而动态变化。

  • 永久消息:与实时消息不同,永久消息显示的是不会频繁变动的信息,如程序的版本号、开发机构的名称或版权声明等。这些信息对于程序的识别、版本追踪或版权保护具有重要意义。

  • 进度消息:它可以通过进度条或百分比的形式,直观地展示任务的完成进度,帮助用户了解任务的执行状态和剩余时间。

1. 状态栏的创建

在Qt中,状态栏的访问是通过QMainWindow类提供的statusBar()函数来实现的,该函数返回对当前窗口状态栏(QStatusBar对象)的引用,允许开发者对其进行配置或操作。

// 获取默认的状态栏  
QStatusBar *stbar = statusBar();  // 将状态栏置于窗口中
this->setStatusBar(stbar);

2. 在状态栏中显示实时消息

在Qt的状态栏中显示实时消息,是通过调用QStatusBar对象的showMessage()函数来实现的。这个函数允许开发者指定要显示的消息内容,并可选择性地设置消息显示的持续时间。

示例代码如下:

// 假设statusBar()返回的是当前窗口的状态栏对象
statusBar()->showMessage("这是一个实时消息", 2000); // 消息将显示2000毫秒(即2秒)

如果省略时间参数或将其设置为0,消息将一直显示,直到被另一个showMessage()调用替换。

3. 在状态栏中显示永久消息

在Qt的状态栏中,要实现类似永久消息的效果,可以通过向状态栏中添加一个或多个QLabel(或其他QWidget)来实现。

示例代码如下:

// 创建状态栏  
QStatusBar *stbar = statusBar();  
// 将状态栏置于窗口中
this->setStatusBar(stbar);
// 创建标签  
QLabel* label = new QLabel("提示信息", this);  
// 将标签放入状态栏中  
stbar->addWidget(label);

🎯显示效果如下:
在这里插入图片描述

4. 调整显示消息的位置,并加上进度条

// 创建一个QProgressBar对象,用于在状态栏中显示进度条  
QProgressBar* progressBar = new QProgressBar();  
progressBar->setRange(0, 100);  
progressBar->setValue(50); 
statusBar->addWidget(progressBar);  // 这个按钮将被添加到状态栏的右侧,并作为永久部件存在,不会自动调整大小  
QPushButton* button = new QPushButton("右侧提示信息");  // 将按钮作为永久部件添加到状态栏的右侧  
statusBar->addPermanentWidget(button);  

在这里插入图片描述


http://www.ppmy.cn/embedded/102071.html

相关文章

系统架构设计师——架构风格

概述 软件体系结构风格是指在软件架构设计中,针对特定应用领域所采用的一套惯用模式,这些模式定义了系统的组织方式。以下是对软件体系结构风格的详细解析: 1. 体系结构风格的概念 目的:简化设计过程,提高设计的重用…

特色农产品全网品牌优化,让价值超越地域限制!

目前农村电商产业发展迅猛,为各地农产品开辟了新路径。据商务大数据监测,2024年1-7月农产品网络零售额增长20.1%,为乡村振兴注入了强大活力。在可预见的未来,农产品将依旧保持稳步增长的发展态势。对于大多数农产品企业来说&#…

docker compose用法详解

下面是每个 docker compose 配置参数的用法和示例: 全局选项用法示例 --ansi 控制何时打印 ANSI 控制字符。示例: docker compose --ansi never up 禁用 ANSI 控制字符的打印(颜色和格式)。 --compatibility 在向后兼容模式下运…

网络安全之渗透测试实战-DC-3-靶机入侵

一、下载靶机DC-3,解压后导入Vmware Workstation https://pan.baidu.com/s/17BcSH6RqC7wuyB7PRNqOow?pwdkc12启动DC-3靶机,由于不知道密码,无需登录 二、靶机的网卡采用的是NAT模式自动获取IP地址,此时我们需要先获取其MAC地址…

排序算法之归并排序详细解读(附带Java代码解读)

归并排序(Merge Sort)是一种稳定的排序算法,采用分治法(Divide and Conquer)的思想。它将一个数组分成两个子数组,分别对这两个子数组进行排序,然后将两个已排序的子数组合并成一个有序的数组。…

自动化刷题小练习

驾校题库自动化刷题,使用了selenium以及requests等一些爬虫用的库 from selenium import webdriver from selenium.webdriver.common.by import By import requests import re import time driverwebdriver.Chrome()driver.get("https://www.jsyks.com/kms-mn…

泰山派的小手机后续(2)

之前 触摸板一直报错的解决: 1 我的触摸板 画错了。 从新画了一个 触摸的转接板,调整过来了。 关于触摸的 线序。 这块屏幕正常 就是横着放的。 关于泰山派接口的线序: 所以我的转接板的画法 是: 开发板与转接板 使用的是 反排线…

黑神话攻略,带你找到一周目隐藏的四大天王!

《黑神话》这款国产动作游戏深受玩家期待,它带来了一段充满刺激的冒险旅程。游戏中有一个关于四大天王的谜题,让不少玩家感到困惑。有人认为这关系到游戏的真正结局,有人则认为只有二周目才能解锁。实际上,这个谜题在一周目就可以…

PyTorch Geometric(torch_geometric)简介

在深入探讨PyTorch Geometric(通常简称为PyG)之前,我们先了解一下它的背景和应用。PyG是基于PyTorch的一个扩展库,专为图数据和图网络模型设计。图网络是深度学习领域的一种强大工具,它能够处理结构化数据,…

云原生之全链路分布式跟踪系统 Zipkin和SkyWalking

贪多嚼不烂 Pinpoint 就不对比了 参考 APM系统简单对比(zipkin,pinpoint和skywalking) springcloud 看云 Zipkin和SkyWalking都是流行的分布式跟踪系统,但它们的设计和实现有明显的不同。 以下是它们之间的一些对比: 数据存储: Zipk…

【Leetcode 2068 】 检查两个字符串是否几乎相等 —— 击败100%

如果两个字符串 word1 和 word2 中从 a 到 z 每一个字母出现频率之差都 不超过 3 ,那么我们称这两个字符串 word1 和 word2 几乎相等 。 给你两个长度都为 n 的字符串 word1 和 word2 ,如果 word1 和 word2 几乎相等 ,请你返回 true &#x…

小白之 FastGPT Windows 本地化部署

目录 引言环境步骤1. 安装 docker2. 启动 docker3. 浏览器访问4. One API 配置语言模型、向量模型渠道和令牌5. 创建 FastGPT 知识库6. 创建 FastGPT 应用 官方文档 引言 部署之前可以先看一下 RAG 技术原理,也可以后面回过头来看,对一些概念有些了解&a…

Vue 项目中使用路由鉴权实现网页进度条

概述 在 Web 开发中,用户界面的流畅性和交互性对用户体验至关重要。为了在页面跳转时给用户提供反馈,我们可以利用 NProgress 这样的第三方库来实现一个进度条。本文档将指导您如何在 Vue 项目中结合路由鉴权来实现这一功能。 准备工作 确保您已经安装…

Mysql的命令大全

一、数据库 1、创建数据库 create database 数据库名 charset utf8;2、查看数据库 show databases; select databse();3、删除数据库 drop databse 数据库名;4、使用数据库 use 数据库名;二、数据表 1、创建表 create table 表名(字段名 类型);2、查看表 show tables;3…

排序算法之快速排序详细解读(附带Java代码解读)

快速排序(Quick Sort)是一种高效的排序算法,由 C.A.R. Hoare 在 1960 年提出。它采用分治法的思想,将数组分为两部分,然后分别对这两部分进行排序,最终合并成一个有序数组。快速排序在大多数情况下表现优异…

鸿蒙后台运行,鸿蒙播放音乐后台

1、权限: 1.1、在entry > src > main > module.json5中配置: "requestPermissions": [{"name": "ohos.permission.KEEP_BACKGROUND_RUNNING"}], 1.2、在ability中配置backgroundModes(也是module.js…

C\C++ Sqlite3使用详解

C\C++ Sqlite3使用详解 一、源码下载二、sqlite3接口说明C++2.1 项目创建以及sqlite3使用2.1 连接数据库2.2 sqlite创建表2.2.1 示例代码2.2.2 注意事项2.3 sqlite插入数据2.3.1 示例代码2.3.2 注意事项2.4 sqlite数据删除2.5 sqlite数据查询一、源码下载 下载地址: https://…

大模型面试:LLM+向量库的文档对话系统

面试题 1.1 为什么大模型需要外挂(向量)知识库?如何将外部知识注入大模型,最直接的方法:利用外部知识对大模型进行微调 回答 大模型需要外挂(向量)知识库的原因: 知识更新频率:大模型在训练时使用的知识是静态的&a…

【大模型LLMs】文本分块Chunking调研LangChain实战

【大模型LLMs】文本分块Chunking调研&LangChain实战 Chunking策略类型1. 基于规则的文本分块2. 基于语义Embedding分块3. 基于端到端模型的分块4. 基于大模型的分块 Chunking工具使用(LangChain)1. 固定大小分块(字符&token&#xff…

Python--迭代器、生成器和装饰器

在 Python 中,迭代器和生成器是处理可迭代对象的两个核心概念,它们可以帮助我们高效地遍历数据。装饰器则是 Python 中的一种高级功能,用于修改函数或类的行为。接下来详细阐述并扩展这些概念。 1. 迭代器 迭代器的定义 迭代器是一个实现了…