Qt---状态栏、工具栏、浮动窗口

文章目录

  • 工具栏
    • 创建工具栏
    • 停靠位置
    • 浮动性与移动
  • 状态栏
    • 创建状态栏并显示消息
  • 浮动窗口
    • 创建浮动窗口
    • 设置停靠位置
    • 往浮动窗口添加内容

工具栏

工具栏是应用程序中集成各种功能实现快捷键使用的⼀个区域。

创建工具栏

工具栏与菜单栏不同,并不会自动创建,需要手动去创建出来并添加到窗口里。

QToolBar *toolBar = new QToolBar();
this->addToolBar(toolBar);

img

刚创建出来的工具栏是空白的,可以往里面添加一下菜单项。

// 创建两个菜单项
QAction* action1 = new QAction("保存");
QAction* action2 = new QAction("打开");

// 添加菜单项到工具栏
toolBar->addAction(action1);
toolBar->addAction(action2);

img
同样的这些菜单项都是可以点击的并可以编写槽函数。

一般来说工具栏都不会直接以文字的形式呈现,而是会以图片的形式呈现,所以可以给菜单项设置图标

// 给菜单项添加图标
action1->setIcon(QIcon(":/img/save.png"));
action2->setIcon(QIcon(":/img/open.png"));

img

停靠位置

工具栏可以停在上下左右四个位置,并且可以设置初始的位置。

在 addToolBar 函数中的第一个参数可以指定位置:

  • Qt::LeftToolBarArea:左侧
  • Qt::RightToolBarArea:右侧
  • Qt::TopToolBarArea:顶部
  • Qt::BottomToolBarArea:底部
// 创建四个工具栏
QToolBar *toolBar1 = new QToolBar();
QToolBar *toolBar2 = new QToolBar();
QToolBar *toolBar3 = new QToolBar();
QToolBar *toolBar4 = new QToolBar();
this->addToolBar(Qt::LeftToolBarArea, toolBar1); // 左
this->addToolBar(Qt::RightToolBarArea, toolBar2); // 右
this->addToolBar(Qt::TopToolBarArea, toolBar3); // 上
this->addToolBar(Qt::BottomToolBarArea, toolBar4); // 下

// 创建四个菜单项
QAction* action1 = new QAction("保存1");
QAction* action2 = new QAction("保存2");
QAction* action3 = new QAction("保存3");
QAction* action4 = new QAction("保存4");

// 分别添加菜单项到工具栏
toolBar1->addAction(action1);
toolBar2->addAction(action2);
toolBar3->addAction(action3);
toolBar4->addAction(action4);

img

因为工具栏默认是可以移动的,因此工具栏可以被拖动到别的位置停靠。

这时就可以有需求工具栏只能停在某些位置,就可以使用 setAllowedAreas 函数设置只能在某个位置停靠

// 设置工具栏只允许在左侧和右侧停靠
toolBar1->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);

img

浮动性与移动

工具栏默认时开启可浮动的

img

可以通过 setFloatable 函数设置浮动性,例如:

// 关闭浮动
toolBar1->setFloatable(false);

关闭了浮动性之后,工具栏没有拖动到可停靠位置的话就会自动回到停靠位置

img

除了可浮动外,有些场景还会将工具栏固定式,也就是不能移动

// 设置不可移动
toolBar1->setMovable(false);

imgimg

注意看,设置了不可移动之后,工具栏上的几个小点就会消失不见。

状态栏

状态栏是应用程序中输出简要信息的区域

创建状态栏并显示消息

// 存在就获取, 不存在就创建
QStatusBar* statusBar = this->statusBar();
this->setStatusBar(statusBar);

img

注意看右下角的消息,两秒后就消失了

当然也可以设置永久的消息提示,不过得借助控件来显示

// 显示永久消息
QLabel *l = new QLabel("hello qt", this);
statusBar->addWidget(l); // 将标签添加到状态栏

img

这样就能永久显示一个消息了。

也可以将消息放到右侧显示

// 显示永久消息
QLabel *l = new QLabel("hello qt", this);
statusBar->addPermanentWidget(l); // 将标签添加到状态栏右侧

两者的区别就在于调用的函数不同

img

浮动窗口

浮动窗口也称之为铆接部件看,⼀般是位于核心部件的周围可以有多个

创建浮动窗口

 // 创建浮动窗口
QDockWidget* dockWidget = new QDockWidget();
// 把浮动窗口加入到窗口中.
this->addDockWidget(Qt::LeftDockWidgetArea, dockWidget);

img

设置停靠位置

其停靠位置的原理和工具栏类似

// 创建浮动窗口
QDockWidget* dockWidget1 = new QDockWidget();
QDockWidget* dockWidget2 = new QDockWidget();
QDockWidget* dockWidget3 = new QDockWidget();
QDockWidget* dockWidget4 = new QDockWidget();
// 把浮动窗口加入到窗口中.
this->addDockWidget(Qt::LeftDockWidgetArea, dockWidget1);
this->addDockWidget(Qt::RightDockWidgetArea, dockWidget2);
this->addDockWidget(Qt::TopDockWidgetArea, dockWidget3);
this->addDockWidget(Qt::BottomDockWidgetArea, dockWidget4);

img

往浮动窗口添加内容

和其他的不同,不能直接给这个浮动窗口添加控件。一个浮动窗口只能加入一个控件,基于这个特性,可以利用布局管理器来添加内容。

先创建一个控件,在这个控件中添加布局管理器,然后在这个布局管理器里先添加其他的控件,再将这个控件添加进浮动窗口。

// 浮动窗口设置标题
dockWidget->setWindowTitle("这是浮动窗口");

// 创建控件
QWidget* container = new QWidget();
dockWidget->setWidget(container);

// 创建布局管理器, 把布局管理器设置到控件中
QVBoxLayout* layout = new QVBoxLayout;
container->setLayout(layout);
// 创建其他控件添加到 layout 中.
QLabel* label = new QLabel("这是一个 QLabel");
QPushButton* button = new QPushButton("这是按钮");
layout->addWidget(label);
layout->addWidget(button);

// 将这个控件添加到浮动窗口
dockWidget->setWidget(container);

img

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【网络编程】如何创建一个自己的并发服务器?

hello !大家好呀! 欢迎大家来到我的网络编程系列之如何创建一个自己的并发服务器,在这篇文章中,你将会学习到在Linux内核中如何创建一个自己的并发服务器,并且我会给出源码进行剖析,以及手绘UML图来帮助大家…

UE 录屏自动化上传阿里云OSS

前言 最近在做一个功能,然后就发现了一个很有趣的东西,虽然在一定程度上属于偷懒,但是在一些短频快的应用中还是很适用的,下面我就针对于这个测试做一些简单的分享,希望帮助到大家,在实际的开发中获得一些灵…

Java-常用API-1

Math类 public static int abs(int a) 获取绝对值public static double ceil(double a)向上取整(向数轴右边取整)public static double floor(double a)向下取整(向数轴左边取整)public static int round(float a)四舍五入public…

SQL SERVER的安装

目录 1.百度SQL SERVER找到图下的所显示的,点击进去 2.找到图下红色框起来的,点击立即下载 3.下载好之后点开,选择下载介质 4.SQLSERVER下载成功之后选择打开文件夹 6.双击后缀名是.iso的镜像文件 7.双击setup.exe进行安装 8.安装成功…

Web3D智慧医院平台(HTML5+Threejs)

智慧医院的建设将借助物联网、云计算、大数据、数字孪生等技术,以轻量化渲染、极简架构、三维可视化“一张屏”的形式,让医院各大子系统管理既独立又链接,数据相互融合及联动。 建设医院物联网应用的目标对象(人、物)都…

Java复习第二十天学习笔记(过滤器Filter),附有道云笔记链接

【有道云笔记】二十 4.8 过滤器Filter https://note.youdao.com/s/dSofip3f 一、为什么要使用过滤器 项目开发中,经常会用到重复代码的实现。 1、请求每个servlet都要设置编码 2、判断用户是否登录,只有登录了才有操作权限。 二、过滤器相关Api int…

【机器学习300问】71、神经网络中前向传播和反向传播是什么?

我之前写了一篇有关计算图如何帮助人们理解反向传播的文章,那为什么我还要写这篇文章呢?是因为我又学习了一个新的方法来可视化前向传播和反向传播,我想把两种方法总结在一起,方便我自己后续的复习。对了顺便附上往期文章的链接方…

论文笔记:(INTHE)WILDCHAT:570K CHATGPT INTERACTION LOGS IN THE WILD

iclr 2024 spotlight reviewer 评分 5668 1 intro 由大型语言模型驱动的对话代理(ChatGPT,Claude 2,Bard,Bing Chat) 他们的开发流程通常包括三个主要阶段 预训练语言模型在被称为“指令调优”数据集上进行微调&…

通过腾讯云搭建跨境电商demo的详细操作过程(建站系统 保姆级指导,巨详细)

引言: 有许多做跨境电商的朋友,或者为跨境电商服务的小企业,都会面临搭建电商平台V1.0的问题 因此,花了点时间,找了一个开源的项目,让大家可以跑起来,一方面了解平台都有哪些模块,另…

护网行动 | 蓝队应急响应流程概述

了解蓝队应急响应的流程 应急响应通常是指为了应对各种意外事件发生前所做的准备,以及在意外事件发生后所采取的措施。 网络安全应急响应是指对已经发生或可能发送的安全事件进行监控、分析、协调、处理、保护资产安全。 网络安全应急响应主要是为了让人们对网络安全…

3D模型处理的并行化

今天我们将讨论如何使用 Python 多进程来处理大量3D数据。 我将讲述一些可能在手册中找到的一般信息,并分享我发现的一些小技巧,例如将 tqdm 与多处理 imap 结合使用以及并行处理存档。 那么我们为什么要诉诸并行计算呢? 使用数据有时会出现…

IAM 统一身份认证与访问管理服务

即统一身份认证与访问管理服务,是云服务商提供的一套云上身份管理解决方案,可帮助企业安全地管理云上资源的访问权限。 在当今云计算时代,企业越来越依赖云服务来存储和处理敏感数据。然而,这也带来了新的安全挑战,即…

ssm 体检预约管理系统开发mysql数据库web结构java编程计算机网页源码eclipse项目

一、源码特点 ssm 体检预约管理系统是一套完善的信息系统,结合springMVC框架完成本系统,对理解JSP java编程开发语言有帮助系统采用SSM框架(MVC模式开发),系统具有完整的源代码和数据库, 系统主要采用B/S…

URL GET +号后台接收成空格

问题:参数spdmwhbs001 其中包含URL特殊符号 如果用GET请求方式不做任何不处理那么浏览器自动将转为%20 请求链接为 details?spdmwhbs%20001&limitKcysType1 后台接收到的参数为 whbs 001 ,自动将号转成空格了。 尝试解决(失败&#…

【Java】@RequestMapping注解在类上使用

RequestMapping 是 Spring Web 应用程序中最常被用到的注解之一。这个注解会将 HTTP 请求映射到控制器(controller类)的处理方法上。 Request Mapping 基础用法 在 Spring MVC 应用程序中,RequestDispatcher (在 Front Controller 之下) 这…

git clone遇到报错“SSL certificate problem: self signed certificate”

在git clone的时候发现遇到了一个问题: cristDESKTOP-JKRNKSH MINGW64 ~/Desktop $ git clone -b dev https://xxx.xxx.xxx.xxx:3001/crist/AVM_V9M.git Cloning into AVM_V9M... fatal: unable to access https://xxx.xxx.xxx.xxx3001/crist/AVM_V9M.git/: SSL ce…

PSCAD|应用于输电线路故障测距的行波波速仿真分析

1 主要内容 该程序参考文献《应用于输电线路故障测距的行波波速仿真分析》,利用线路内部故障产生的初始行波浪涌达线路两端测量点的绝对时间之差值计算故障点到两端测量点之间的距离,并利用小波变换得到初始行波波头准确到达时刻,从而精准定…

WPS的JS宏如何实现全文件路径字符串中截取文件名(excel)

从全文件路径的字符串中,截取文件名称,例如: 全文件路径字符串为:C:\Windows\System32\drivers\acpi1.sys 需要截取文件名:acpi1.sys 方法如下: 1、简单的方式:把全文件路径字符串拷贝&…

Python基于深度学习的车辆特征分析系统

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

YOLOv8改进 | 知识蒸馏 | 利用模型蒸馏改进YOLOv8进行无损涨点(在线蒸馏 + 离线蒸馏)

一、本文介绍 这篇文章给大家带来的是模型的蒸馏,利用教师模型指导学生模型从而进行模型的涨点,本文的内容不仅可以用于论文中,在目前的绝大多数的工作中模型蒸馏是一项非常重要的技术,所以大家可以仔细学习一下本文的内容&#…