Qml控制多个窗口任务栏图标显示及更改图标
环境:win10;Qt5.11
网上搜索了很久,也没发现这方面的详细教程,花了我好久时间,于是记录下过程。
一、设置任务栏图标是否显示
设置flags: Qt.FramelessWindowHint能去掉窗口标题栏,但不显示任务栏图标
设置flags: Qt.FramelessWindowHint | Qt.Window能显示任务栏图标
然而,对于子窗口不同,子窗口视根窗口为parent,自然不能显示任务栏图标。
这时需要用到Loader组件去动态加载子窗口才能显示任务栏图标,但情况不同。
当子窗口设置为flags: Qt.FramelessWindowHint | Qt.Window,loader加载后并不能显示任务栏图标。
经过尝试发现子窗口visible:true时能显示,由于编译器调试缓存问题,开始误以为是loader的visible属性影响了窗口的visible属性,试了很多遍才搞清楚其实是窗口类的visible属性决定是否显示任务栏图标,即使你item.show出来也不会影响这个机制。
于是有2种处理选择:
- 每次加载前先清除loader,在加载 //不建议这么做
- 在每次hide()|close()后主动清除loader资源 //必须这么做,因为很多时候close仅仅只是相当于hide(),而没有delete对象,而对象是保存在loader中
这里说一下第二种,最简单处理是设置子窗口的onClosing槽函数。
代码:
onClosing: {hide()//不可视窗口退出时不会退出应用loader.source = ""//释放资源console.log("win on closeing.")}
二、更改任务栏图标
由于Window没有icon设置属性,只能借助C++的QWindow|QQuickWindow类实现。
直接上代码:
*.h文件
#ifndef FUNCC_H
#define FUNCC_H#include <QObject>
#include<QQuickWindow>
class FuncC:public QObject
{Q_OBJECT
//注册属性Q_PROPERTY(QQuickWindow* win READ win WRITE setWin NOTIFY winChanged)
public:FuncC();QQuickWindow*win()const;
public Q_SLOTS:void setWin(QQuickWindow*arg);//对m_win赋值自动调用此槽函数Q_SIGNALS:void winChanged();
private:QQuickWindow*m_win;//qml窗口载体};#endif // FUNCC_H
*.cpp
#include "funcc.h"
#include<QDebug>
FuncC::FuncC():m_win(Q_NULLPTR)
{}QQuickWindow *FuncC::win() const
{return m_win;
}void FuncC::setWin(QQuickWindow *arg)
{qDebug()<<"m_win is viaed";m_win=arg;if(!m_win){qDebug()<<"m_win is null";return;}
m_win->setTitle("title");//设置标题
m_win->setIcon(QIcon(":/images/myIcon.png"));//设置图标emit winChanged();//发送信号
}
这里有一个细节,m_win->setIcon(QIcon(":/图片.png"))
':/'是*.cpp和*.h文本调用资源文件的方式,'qrc:/'是*.qml文本调用资源文件方式
毕竟就因为这个细节耽误了我2天时间,害得我疯狂百度屁用没有!!!可能就是太简单,所以没有人发这方面的文章吧!
最后,等每次loader加载完组件后,立即调用注册的c++类完成更改图标:
funcC.win=loader.item
于此,可以自由控制窗口显示图标及更改图标。
但还有一个缺陷是,自定义的窗口标题栏和任务栏的标题栏的图标是不一致的,而一样又会导致任务栏的图标和标题栏的图标不一致,所以设置窗口图标是治标不治本,只是任务栏图标默认采用窗口图标而已。
如果有这样的需要,可以专门去设计TaskBarButton的样式了。TaskBarButton提供了一个overlay,只需要提供的图片能覆盖住任务栏的图片就能完美掩饰了。
Qml控制多个窗口任务栏图标显示及更改图标相关推荐
- win7 任务栏图标计算机,win7系统任务栏里显示出计算机图标的操作方法
很多小伙伴都遇到过对win7系统任务栏里显示出计算机图标进行设置的困惑吧,一些朋友看过网上对win7系统任务栏里显示出计算机图标设置的零散处理方法,并没有完完全全明白win7系统任务栏里显示出计算机图 ...
- html桌面图标样式,如何更改图标样式,换桌面图标的方法
打开桌面,桌面上摆放了放多程序的快捷方式,我们每天打开电脑最先接触的就是这些快捷方式图标.时间长了,是不是感觉乏味了.可以换一换.比如,在我的电脑桌面上有这样一个图标,那怎样更改桌面图标?下面,小编给 ...
- 电脑桌面图标显示错乱-重建图标缓存
重建图标缓存. 1. 用软件,比如"魔方"--FixMaster--图标缓存修复--重建图标缓存. 2.手动刷新缓存:首先打开资源管理器--组织--文件夹和搜索选项--查看,选中& ...
- Touch Bar 废物利用系列 | 在触控栏上显示 Dock 应用图标
简评: 这是我见过的最有用的 TouchBar 应用,感谢@Aceyclee 分享 都说 Intel 第八代 CPU 对比上代是牙膏不小心挤多了,而配备第八代 CPU 的 MacBook Pro,只有 ...
- Windows11 任务栏不显示应用程序图标
1.按windows徽标+X即可 2.任务管理器结束explorer并重新运行
- 一招搞定win10网络图标显示问题-网络图标不见了
win10网络图标有时候会消失不见,通过以下任意一种方法轻松搞定. 方法一: 步骤一:win+R,输入services.msc,找到 Network List Service,双击打开,依次点击:启动 ...
- 电脑右下角WiFi图标显示是地球图标,但是能上网,要让他显示出WiFi图标这么做...
第一步键盘上窗口键+r 输入regedit 然后找到下面的终极地址 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NlaSvc\Parame ...
- java 任务栏程序_如何在任务栏显示java程序图标
该代码实现了在系统右下角的任务栏中显示程序的图标,并且最小化程序后单击图标可以显示出来这个程序窗口 import java.awt.Color; import java.awt.Image; impo ...
- xp计算机管理下的服务显示不出来,WinXP系统任务栏不显示打开窗口的三种解决方案...
最近,不少windowsXP系统用户都碰到了任务栏不显示打开窗口的问题.不过,他们还反馈用TAB+ALT或任务管理器应用程序却可以看到任务项目.这是怎么回事呢?其实,该问题可能是桌面程序explore ...
最新文章
- 深入理解iframe
- 一个完整的iOS开发框架(Frameworks)-NimbusKit
- 2021聊城二中高考成绩查询,聊城高中成绩排名2021,聊城中考分数线排行榜
- tomcat配置多个web网站的配置详解
- 21行代码AC——HDU1106 排序
- Android 安全提示 笔记
- Java设计模式之(工厂模式)--简单工厂模式--工厂方法模式--抽象工厂模式
- azure linux 多磁盘 lvm,EVE-NG扩展磁盘空间(扩展LVM卷)
- (7)<a>标签之锚点和回到顶部功能
- Linux disk 100% busy,谁造成的?
- java 获取当前时间并转化为yyyy-MM-dd HH:mm:ss格式(性程安全模式与不安全)
- Quartz简单理解
- 一些嵌入式开发有用的github上的开源代码库
- 一文看懂什么是车规级芯片
- Golang interface 全面介绍
- 服务器svn自动同步,svn主备服务器实时同步
- 玉米迷宫,Meteor Shower S,单词接龙
- Centos7系统启动盘的正确安装姿势
- 团队对员工工作积极性的影响
- Vue 引入高德地图 vue-amap