QtWindows任务栏

devtools/2024/12/22 20:05:53/

目录

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

引言

针对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。

完整代码

代码下载链接


http://www.ppmy.cn/devtools/34458.html

相关文章

盘点热门的5个AI视频工具(上):附保姆级教程,居然还有免费的?(建议收藏)

一条完全使用 AI 做出的短视频,点赞上万,转发上万! 你敢信,这是我在前几天刷视频的时候,看到的一个 AI 视频案例。 这种 AI 视频为什么会火? AI 虽然不是什么新的领域,但 2023 年&#xff0c…

c++ BSTree二叉搜索树(附原码)

目录 一、概念 二、基本操作 1、插入 2、中序遍历 3、删除 4、查找 5、总结删除 三、应用场景 四、原码 一、概念 左子树比根小,右子树比根大 意义:最多查找高度次数 不需要排序,就达到了二分查找的效率 同时还弥补了单纯数组的插入…

redis之地理空间GEO

使用中文时会乱码,我们可以在启动添加命令 redis-cli -a 密码 -- raw 即可 由名字知其是和地理位置相关的,其将三维地球划分为二维平面进行存储。 命令如下: geoadd name 经度 纬度 名称 :在name中添加一个坐标 zrang name 0…

力扣:62. 不同路径

62. 不同路径 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多少条不同的路径&…

文件批量改名字怎么改(怎样批量修改文件名)

文件批量改名字怎么改(怎样批量修改文件名) 批量重命名文件可以通过多种方法实现,具体取决于用户的操作系统和熟练程度。 以下是一些常见的方法: 下载地址https://download.csdn.net/download/dhyuan_88/89237041 使用操作系统自带…

WP Rocket插件下载:加速您的WordPress网站,提升用户体验

在互联网速度决定用户体验的今天,一个快速加载的网站对于吸引和保留访问者至关重要。WP Rocket插件,作为一款专为WordPress设计的高性能缓存插件,提供了一套完整的解决方案,帮助您优化网站性能,提升用户体验。 [WP Ro…

QT图片图标更改后不加载问题处理

QT通过setPixmap、setIcon、setMovie等方法,设置图片、图标时,会更新图片、图标函数执行,但是图片图标并没有更改的情况。 尝试通过信号槽方式去设置图片,仍然不能响应更改,以下提供一个可行的解决方法。 在setPixma…