qt系统托盘显示、无主窗体
系统图盘是应用程序经常用到的一个控件,当应用程序需要长时间存在的时候,这个控件会变得非常有用,比如,窗口隐藏,显示,关于、关闭等接口都可以放在图盘中处理,今天与到一个问题,需求是这样的:只需要显示图盘,不需要主窗口,提示信息需要动态的改变
看似很简单的一个问题,我自己试了试之后,也倒腾了好一会儿,先看我的第一版程序,代码如下
QSystemTrayIcon *tc = new QSystemTrayIcon;
tc->setToolTip(QStringLiteral("消息提示"));
tc->setIcon(style()->standardIcon(QStyle::SP_TitleBarNormalButton));
tc->show();
QMenu * menu = new QMenu;
QAction * aboutAct = menu->addAction(QStringLiteral("关于"));
connect(aboutAct, &QAction::triggered, this, []{
QWindow * w = new QWindow;
w->show();
});
tc->setContextMenu(menu);
这些代码是为主程序设置了图盘,然后main函数中只需要new一个窗口,图盘就自然显示了,因为图盘自己show了。
不过这样是有问题的,当操作右键菜单事件(关于)后,关闭弹出的菜单,图盘也会随之消息,主程序结束,个人人为是主程序的消息循环退出了导致图盘退出的,然后想办法,试了以下几种方式;
1、main函数中显示窗口,并设置窗口无任务栏图标和最小化:图盘还是会消失
2、main函数显示, 不做任何窗口设置:不消失
方法2的目的其实就是不让主线程的消息循环退出,那我们就朝着这个方向前进,把主窗体背景色设置透明,问题就迎刃而解了,经过测试,果然可以,代码如下:
w->setWindowFlags(Qt::Tool | Qt::FramelessWindowHint );
w->setAttribute(Qt::WA_TranslucentBackground);
注意:窗口如果为QMainWindow,需要手动去掉工具栏和状态栏
其实还有一种办法,不过个人不建议使用,那就是在消息循环结束后立刻重启一个消息循环,总之就是主线程不退出,代码如下:
int ret = 0;
while (true)
{
ret = a.exec();
}
return a.exec();
最后更改气泡提示的方法比较简单,代码如下:
QTimer * timer = new QTimer(this);
connect(timer, &QTimer::timeout, this, [tc]{
static size_t i = ;
tc->showMessage(QStringLiteral("我是标题%1").arg(i++)
, QStringLiteral("我是内容...")
, QSystemTrayIcon::Information, );
});
timer->start();
我是使用了一个定时器,每隔1秒弹出一个提示,大家也可以根据自己的需求来在合适的时机弹出提示
qt系统托盘显示、无主窗体的更多相关文章
- QT系统托盘应用程序
在QT中QSystemTrayIcon类提供了创建系统托盘程序的功能. QSystemTrayIcon类为系统托盘中的应用程序提供图标.现代操作系统通常会在桌面上提供一个称为系统托盘(system t ...
- WinForm 程序在系统托盘显示
前言 有些程序在关闭或最小化的时候会隐藏在系统托盘中,双击或右击会重新显示,winform实现其功能很简单,这边就简单的介绍下. 实现 在winform实现托盘使用notifyIcon控件,如果加菜单 ...
- Qt系统托盘
Qt的系统托盘的使用,可比mfc中好多了!他封装了一个专门的QSystemTrayIcon类,建立系统托盘图标.其实在Qt提供的示例程序已经很不错了,$QTDIR\examples\desktop\s ...
- 【Qt编程】基于Qt的词典开发系列<十一>系统托盘的显示
本文主要讨论Qt中的系统托盘的设置.系统托盘想必大家都不陌生,最常用的就是QQ.系统托盘以简单.小巧的形式能让人们较快的打开软件.废话不多说,下面开始具体介绍. 首先,新建一个Qt Gui项目,类型选 ...
- 用Qt写软件系列四:定制个性化系统托盘菜单
导读 一款流行的软件,往往会在功能渐趋完善的时候,通过改善交互界面来提高用户体验.毕竟,就算再牛逼的产品,躲藏在糟糕的用户界面之后总会让用户心生不满.界面设计需综合考虑审美学.心理学.设计学等多因素, ...
- 【Qt开发】实现系统托盘,托盘菜单,托盘消息
概述 系统托盘就是在系统桌面底部特定的区域显示运行的程序.windows在任务栏状态区域,linux在布告栏区域.应用程序系统托盘功能,是比较普遍的功能,本篇将详细的介绍如何实现该功能. 演示Demo ...
- QT中自定义系统托盘的实现—c++语言为例
将要介绍的是:QT中自定义系统托盘(systemtray)的一个Demo,希望能帮需要的读者快速上手. 前提假设是诸位已经知道QT中的signals .slot以及资源文件,所以关于这些不会再累述. ...
- 使用QT创建系统托盘
使用QT来创建一个系统托盘,事实上是一件很简单的事.为什么这么说?一是因为QT文档给出了比较详细的例子,二是QT的结构比较优雅,设计风格统一.但是在动手之前,我们要从哪里下手?虽然QT文档给出了一个比 ...
- Electron实用技巧-开机启动时隐藏主窗口,只显示系统托盘
# 1 在桌面软件中,开机自启动是很常见的功能,在electron中也提供了很好的支持,以下是主要代码: //应用是否打包if (app.isPackaged) { //设置开机启动 app.se ...
随机推荐
- Extjs在树上加右键菜单--2019-04-15
效果图如下: 使用规则:将监听加到按钮或树上,监听代码如下. 代码如下: listeners : { //节点单击事件 'rowcontextmenu' : function(view, record ...
- python控制语句---循环结构语句
这次主要把循环结构的控制语句补上,主要包含while.for.continue.break.循环嵌套.主要写一些基本的认识以及包含的一些实例.当只有唯一路径且只跑一次的时候选择上一节中的选择结构语句就 ...
- Python 判断文件后缀
方法1, str的endswith方法: ims_path='data/market1501/Market-1501-v15.09.15/bounding_box_test/12312.jpg' im ...
- JavaScript处理null、undefined和空值
最近一直在写前端,在使用jquery的ajax请求然后处理返回值的时候,经常会遇到返回值为undefined或者"null"的情况,很是头疼,而返回接口是来自于其他公司的,所以这种 ...
- 光流法-opencv python
import cv2 import numpy as np cap = cv2.VideoCapture("D:/Workspace/week2/test/test_256_12.mp4&q ...
- iOS-ERROR ITMS-90086:"missing 64-bit support...解决办法
BUG描述:Untiy4.7.1导出的iOS工程包,使用Xcode8.3 Application Loader上传ipa包,遇到ERROR ITMS-90086报错 解决办法:查看错误描述确认是没有支 ...
- 转发 Learning Go — from zero to hero
原文:https://medium.freecodecamp.org/learning-go-from-zero-to-hero-d2a3223b3d86 Learning Go — from zer ...
- tomcat注册服务
转自https://blog.csdn.net/wangmx1993328/article/details/81013715 在 tomcat 的 bin 目录下可以看到一个 service.bat ...
- node.js搭建Web服务器
Node.js 博客搭建 一. 学习需求 Node 的安装运行 会安装node,搭建node环境 会运行node. 基础模块的使用 Buffer:二进制数据处理模块 Event:事件模块 fs:文件系 ...
- HTML图片标签路径解析
img标签中src属性表示的是引用的图片路径,有两种路径类型: 1. 绝对路径 2. 相对路径. 绝对路径:使用图片在硬盘上的绝对位置来访问图片,通常是从根目录开始,向下一个目录一个目录的寻找. ...