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

阅读导航

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

引言

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

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

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

1. 浮动窗口的创建

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

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

2. 设置停靠的位置

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

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

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

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

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

状态栏是应用程序中一个重要的组成部分,用于在主窗口的最底部区域输出简要的信息给用户。每个窗口通常仅包含一个状态栏,以集中展示与当前操作或程序状态相关的关键信息。在Qt框架中,状态栏的实现依赖于QStatusBar类,它提供了一套丰富的接口来管理和展示不同类型的信息。


QStatusBar支持显示多种类型的消息,以满足不同场景下的需求:

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

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

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

1. 状态栏的创建

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

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

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

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

示例代码如下:

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

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

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

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

示例代码如下:

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

🎯显示效果如下:

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

cpp 复制代码
// 创建一个QProgressBar对象,用于在状态栏中显示进度条  
QProgressBar* progressBar = new QProgressBar();  
progressBar->setRange(0, 100);  
progressBar->setValue(50); 
statusBar->addWidget(progressBar);  

// 这个按钮将被添加到状态栏的右侧,并作为永久部件存在,不会自动调整大小  
QPushButton* button = new QPushButton("右侧提示信息");  
  
// 将按钮作为永久部件添加到状态栏的右侧  
statusBar->addPermanentWidget(button);  
相关推荐
计算机科研之友(Friend)2 分钟前
计算机视觉(一)—— 特刊推荐
数据库·人工智能·计算机网络·搜索引擎·计算机视觉
NineData5 分钟前
K1计划100%收购 MariaDB; TDSQL成为腾讯云核心战略产品; Oracle@AWS/Google/Azure发布
数据库·oracle·腾讯云·mariadb·azure·amazon·tdsql
金牌服务刘11 分钟前
如何选择合适的数据报表工具?
数据库·微服务·信息可视化·容器·数据挖掘·数据分析·负载均衡
一个风轻云淡18 分钟前
TDSQL数据库介绍
数据库
丁总学Java1 小时前
mysql-搭建主从复制
数据库·mysql·adb
2201_757679983 小时前
QT学习第五天
开发语言·qt·学习
程序者王大川3 小时前
【物联网】时序数据库InfluxDB解析及1.x版本与2.x版本区别详解
java·数据库·物联网·数据采集·时序数据库·数据·工业互联网平台
我的K84093 小时前
ClickHouse的安装配置+DBeaver远程连接
数据库·clickhouse
小怪兽ysl4 小时前
【PostgreSQL-patroni维护命令】
数据库·postgresql
程序者王大川4 小时前
【物联网】深入解析时序数据库TDengine及其Java应用实践
java·大数据·数据库·物联网·时序数据库·tdengine