QtWindows任务栏

目录

  • 引言
  • 任务栏进度
  • 右键菜单
  • 缩略图工具栏
  • 完整代码

引言

针对Windows系统的任务栏,Qt基于系统的原生接口封装有一些非常见类,如QWinTaskbarButton、QWinTaskbarButton、QWinThumbnailToolBar等,用于利用工具栏提供更多的信息,诸如通过任务栏就能知道当前下载的进度、任务栏右键菜单会记录之前打开的文件等。

任务栏进度

A progress indicator is used to give the user an indication of the progress of an operation and to reassure them that the application is still running.
If minimum and maximum both are set to 0, the indicator shows up as a busy (indeterminate) indicator instead of a percentage of steps. This is useful when it is not possible to determine the number of steps.

例图描述
在这里插入图片描述A progress indicator at 50%.
在这里插入图片描述A paused progress indicator at 50%.
在这里插入图片描述A stopped progress indicator at 50%.
在这里插入图片描述An indeterminate progress indicator.

如上所示,QWinTaskbarProgress能够表示不同的状态,如当前进度、暂停、停止等。当然这个依赖于当前的系统版本,不同版本的进度状态表现是不一样的,诸如Windows11就将进度条从背景改为置底,如下图中最右侧的图标:
在这里插入图片描述

示例代码:

void MainWindow::onStarted()
{
    if(!taskbar_button_){
        taskbar_button_ = new QWinTaskbarButton(this);
        taskbar_button_->setOverlayIcon(QIcon(":/image/rocket.png"));
        taskbar_button_->setWindow(windowHandle());

        taskbar_progress_ = taskbar_button_->progress();
        taskbar_progress_->setRange(0, 100);
        taskbar_progress_->show();
    }

    timer_->start();
}
void MainWindow::onTimeout()
{
    if(!taskbar_progress_) {
        return;
    }
    taskbar_progress_->setValue((taskbar_progress_->value() + 15) % 100);
}

如上所示,首先需要构造QWinTaskbarButton,可以通过函数setOverlayIcon为其设置图标,此处设置火箭的图标,可以增加额外的提示和趣味性。再者就是设置其显示在哪个窗体上,需要通过setWindow设置原生窗口的指针。最后就是从QWinTaskbarButton取出QWinTaskbarProgress,通过setValue设置当前进度即可。

需要注意的是,windowHandle()需要在窗体第一次show()之后,才能获得到正确的原生窗口指针,Qt的窗体在构造时并未构造原生窗体,只有在show()之后才会真正去创建,因此一般是在需要使用才会创建QWinTaskbarButton并赋值,也可以在showEvent中,而不是在QMainWindow的构造函数内完成。

右键菜单

在这里插入图片描述

任务栏的右键菜单在IDE中很常用,用来记录之前打开的文件列表,Qt中通过QWinJumpList实现,代码如下:

void MainWindow::onStarted()
{
    if(!taskbar_button_){
        taskbar_button_ = new QWinTaskbarButton(this);
        taskbar_button_->setOverlayIcon(QIcon(":/image/rocket.png"));
        taskbar_button_->setWindow(windowHandle());

        taskbar_progress_ = taskbar_button_->progress();
        taskbar_progress_->setRange(0, 100);
        taskbar_progress_->show();
    }

    timer_->start();
}
void MainWindow::onTimeout()
{
    if(!taskbar_progress_) {
        return;
    }
    taskbar_progress_->setValue((taskbar_progress_->value() + 15) % 100);
}

QWinJumpList 中有已经创建好的分类QWinJumpListCategory ,如tasks、recent,可以添加对应的item或是link,实现一些快捷功能。tasks默认是隐藏的需要打开,添加在recent中的记录会有缓存,如果不希望保留可以在添加前调用clear()。

缩略图工具栏

在这里插入图片描述

当鼠标悬浮在任务栏上会有缩略图弹窗,在其下方是可以额外增加工具条的,如上所示。同样的Qt封装边界类QWinThumbnailToolBar可以轻松完成,构造toolBar及所需要的toolButton,再将按钮添加至工具栏即可,代码如下:

void MainWindow::onStarted()
{
    if(!taskbar_button_){
        taskbar_button_ = new QWinTaskbarButton(this);
        taskbar_button_->setOverlayIcon(QIcon(":/image/rocket.png"));
        taskbar_button_->setWindow(windowHandle());

        taskbar_progress_ = taskbar_button_->progress();
        taskbar_progress_->setRange(0, 100);
        taskbar_progress_->show();
    }

    timer_->start();
}
void MainWindow::onTimeout()
{
    if(!taskbar_progress_) {
        return;
    }
    taskbar_progress_->setValue((taskbar_progress_->value() + 15) % 100);
}

比较特殊的属性dismissOnClick,点击后是否关闭缩略图浮窗,默认为false。

完整代码

代码下载链接

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

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

相关文章

开源电子邮件营销平台 listmonk 使用教程

做产品肯定要做电子邮件营销,特别是面向海外的产品,电子邮件营销已成为企业与客户沟通、建立品牌忠诚度和推动销售的重要工具,可以直接接触到目标受众,提供个性化内容,并以相对较低的成本获得可观的投资回报。你看&…

用HAL库改写江科大的stm32入门例子_1、按键控制led灯

1 如下图设置PB11 管脚 2 设置PB11为下降沿中断: 3 PA1 设置为推挽输出 4、NVIC 开启中断使能: 5、写中断事件: 完整代码如下: void EXTI15_10_IRQHandler(void) {/* USER CODE BEGIN EXTI15_10_IRQn 0 *///torning on the led…

母婴店运用商城小程序店铺的效果是什么

母婴市场规模高,还可与不少行业无缝衔接,尤其是以90后、00后为主的年轻人,在备孕生育和婴儿护理前后等整体流程往往不惜重金且时间长,母婴用品无疑是必需品,商家需要多方面拓展全面的客户及打通场景随时消费路径。 运…

24.5.5(离散化+树状数组,线段树)

星期一: dp题单 背包 第四题 混可乐 cf传送门 思路:条件可演化为每种可乐值为 ai-n,选最少的可乐使总和为0(具体可看官方题解 到这会发现背包并不适合了,其实这是道bfs伪装的背包…

【Linux网络】网络文件共享

目录 一、存储类型 二、FTP文件传输协议 2.1 FTP工作原理 2.2 FTP用户类型 2.3 FTP软件使用 2.3.1 服务端软件vsftpd 2.3.2 客户端软件ftp 2.4 FTP的应用 2.4.1 修改端口号 2.4.2 匿名用户的权限 2.4.3 传输速率 三、NFS 3.1 工作原理 3.2 NFS软件介绍 3.3 NFS配…

数据结构===二叉树

文章目录 概要二叉树的概念分类存储遍历前序中序后序 小结 概要 简单写下二叉树都有哪些内容,这篇文章要写什么 二叉树的概念分类,都有哪些二叉树遍历 对一个数据结构,最先入手的都是定义,然后才会有哪些分类,对二叉…

C语言 | Leetcode C语言题解之第70题爬楼梯

题目: 题解: int climbStairs(int n) {double sqrt5 sqrt(5);double fibn pow((1 sqrt5) / 2, n 1) - pow((1 - sqrt5) / 2, n 1);return (int) round(fibn / sqrt5); }

机器人系统ros2-开发实践05-将静态坐标系广播到 tf2(Python)-定义机器人底座与其传感器或非移动部件之间的关系

发布静态变换对于定义机器人底座与其传感器或非移动部件之间的关系非常有用。例如,最容易推断激光扫描仪中心框架中的激光扫描测量结果。 1. 创建包 首先,我们将创建一个用于本教程和后续教程的包。调用的包learning_tf2_py将依赖于geometry_msgs、pyth…

【负载均衡式在线OJ项目day1】项目结构

一.功能 查看题目列表,在线编程,判题功能,即leetcode的部分功能 二.宏观结构 整个项目是BS模式,客户端是浏览器,和用户交互并向服务器发起请求。 服务端从功能上来说分为两个模块,第一个是OJServer&…

FFmpeg———encode_video(学习)

目录 前言源码函数最终效果 前言 encode_video:实现了对图片使用指定编码进行编码,生成可播放的视频流,编译时出现了一些错误,做了一些调整。 基本流程: 1、获取指定的编码器 2、编码器内存申请 3、编码器上下文内容参数设置 4、…

平平科技工作室-Python-超级玛丽

一.准备图片 放在文件夹取名为images 二.准备一些音频和文字格式 放在文件夹media 三.编写代码 import sys, os sys.path.append(os.getcwd()) # coding:UTF-8 import pygame,sys import os from pygame.locals import* import time pygame.init() # 设置一个长为1250,宽为…

03.配置监控一台服务器主机

配置监控一台服务器主机 安装zabbix-agent rpm -ivh https://mirror.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.11-1.el7.x86_64.rpm配置zabbix-agent,配置的IP地址是zabbix-server的地址,因为要监控这台主机 vim /etc/zabbix/zab…

淘宝线上扭蛋机小程序:推动扭蛋机销量

扭蛋机作为一个新兴的娱乐消费模式,能够带给消费者“盲盒式”的消费乐趣,正在快速发展中。消费者通过投币、扫码支付等,在机器上扭下按钮就可以随机获得一个扭蛋商品,这些商品也包括动漫衍生周边、IP主题商品等,种类多…

先电2.4的openstack搭建

先电2.4版本的openstack,前期虚拟机部署参考上一篇2.2版本,基本步骤是一样的,准备两个镜像文件CentOS-7.5-x86_64-DVD-1804.iso,XianDian-IaaS-V2.4.iso [rootcontroller ~]# cat /etc/sysconfig/network-scripts/ifcfg-eno16777…

新手开抖店多久可以出单?做好这两点!七天必出单!

哈喽~我是电商月月 很多新手开抖店长时间不出单,觉得不正常,害怕新手根本做不起来店,就会搜索:新手开抖店多久可以出单? 新手开店,合理运营的话,七天里肯定是能出几单的,但没做好的…

AI新突破:多标签预测技术助力语言模型提速3倍

DeepVisionary 每日深度学习前沿科技推送&顶会论文分享,与你一起了解前沿深度学习信息! 引言:多标签预测的新视角 在人工智能领域,尤其是在自然语言处理(NLP)中,预测模型的训练方法一直在…

Android(一)

坏境 java版本 下载 Android Studio 和应用工具 - Android 开发者 | Android Developers 进入安卓官网下载 勾选协议 next 如果本地有设置文件,选择Config or installation folder 如果本地没有设置文件,选择Do not import settings 同意两个协议 耐…

Android 14 init进程解析

前言 当bootloader启动后,启动kernel,kernel启动完后,在用户空间启动init进程,再通过init进程,来读取init.rc中的相关配置,从而来启动其他相关进程以及其他操作。 init进程启动主要分为两个阶段&#xff1…

张大哥笔记:卖盗版网课,获利 100 万被抓

这几天刷视频,看到一个新闻,某大学生卖盗版网课,把别人2000多正版网课,以做活动名义售卖20元,获利100多万被抓。 下方图片来自:极目新闻 卖这种盗版网课,门槛低,成本低,…

win中python中OpenCV使用cv2.imshow()报错的解决办法

1. 问题 cv2.error: OpenCV(4.9.0) D:\a\opencv-python\opencv-python\opencv\modules\highgui\src\window.cpp:1272: error: (-2:Unspecified error) The function is not implemented. Rebuild the library with Windows, GTK 2.x or Cocoa support. If you are on Ubuntu o…