在别人代码基础上做的,课设刚好用上了,贴出来分享Qt5.5.1实现。

图片自己找。

#ifndef DIALOG_H
#define DIALOG_H #include <QDialog>
#include <QTimer>
#include <QMenu>
#include <QCloseEvent>
#include <QMessageBox>
#include <QSystemTrayIcon> namespace Ui {
class Dialog;
} class Dialog : public QDialog {
Q_OBJECT
public:
Dialog(QWidget *parent = );
~Dialog();
void InitUi();
void InitTray(); //初始化托盘
void InitLayout();
void closeEvent(QCloseEvent *); //在关闭窗口时候要重写该函数,为了最小化到托盘,而不是退出程序
void ShowMessageBox(); //像是托盘图表的messagebox();
protected:
void changeEvent(QEvent *e); private:
Ui::Dialog *ui;
QSystemTrayIcon *tray;
QTimer *timer; //用于闪烁ICON的定时器
int TimerCount; //用于计算定时器超时次数,单数显示图标,双数不显示 并且为0时候表示没有消息 private slots:
void MenuExit(); //右键菜单 退出
void ShowNormal(); //正常显示
void iconIsActived(QSystemTrayIcon::ActivationReason); //托盘图表活动,无论是鼠标悬浮,或者双击,或者单击
void ShowClickMsg(); //点击了消息框后的响应函数
void qq_msg_com();
void updateIcon(); //定时器刚 }; #endif // DIALOG_H

dialog.h

#include "dialog.h"
#include "ui_dialog.h" Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
InitUi();
InitTray();
InitLayout();
} Dialog::~Dialog()
{
delete ui;
} void Dialog::changeEvent(QEvent *e)
{
QDialog::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
default:
break;
}
}
//初始化部件
void Dialog::InitUi()
{
timer=new QTimer(this);
TimerCount=; //初始化为零 }
//初始化托盘
void Dialog::InitTray()
{
QMenu *contexmenu=new QMenu(this); //注意右键菜单的父对象,在窗口销毁后要把菜单也销毁掉
QAction *shut=new QAction("quit",this); //菜单中两个动作
QAction *openNomal=new QAction("show normal",this);
QAction *qqmsg=new QAction("QQ Msg",this);
contexmenu->addAction(shut);
contexmenu->addSeparator();
contexmenu->addAction(openNomal);
contexmenu->addSeparator();
contexmenu->addAction(qqmsg);
connect(shut,SIGNAL(triggered()),this,SLOT(MenuExit())); //点击了这两个菜单
connect(openNomal,SIGNAL(triggered()),this,SLOT(ShowNormal()));
connect(qqmsg,SIGNAL(triggered()),this,SLOT(qq_msg_com()));
tray=new QSystemTrayIcon(this);
tray->setToolTip("try to click"); //放在图表上时候显示
tray->setContextMenu(contexmenu);
tray->setIcon(QIcon("image/icon.png"));
tray->show();
connect(tray,SIGNAL(activated(QSystemTrayIcon::ActivationReason)),this,SLOT(iconIsActived(QSystemTrayIcon::ActivationReason)));
connect(tray,SIGNAL(messageClicked()),this,SLOT(ShowClickMsg())); //模拟QQ消息到来时候的闪烁图表
}
//初始化布局
void Dialog::InitLayout()
{}
//相应关闭窗口消息函数
void Dialog::closeEvent(QCloseEvent *event)
{
if(tray->isVisible())
{
QMessageBox::about(this,tr("最小化"),tr("最小化到托盘"));
this->hide();
event->ignore();
} }
//响应右键菜单正常显示
void Dialog::ShowNormal()
{
timer->stop();
tray->setIcon(QIcon(":/new/prefix1/2")); //正常显示时候恢复原有图标,防止定时器在无显示图表时候被终止
this->show();
}
//响应右键菜单 关闭程序
void Dialog::MenuExit()
{
exit();
}
//托盘图标活动l
void Dialog::iconIsActived(QSystemTrayIcon::ActivationReason reason)
{
switch(reason)
{
case QSystemTrayIcon::DoubleClick:
ShowNormal();
break;
case QSystemTrayIcon::Trigger:
ShowMessageBox();
break;
case QSystemTrayIcon::Unknown:
QMessageBox::about(this,"unkown","unkown activation");
break;
default:
break;
}
}
void Dialog::ShowMessageBox()
{
QSystemTrayIcon::MessageIcon icon=QSystemTrayIcon::MessageIcon(); //设置图表是标准的系统托盘 信息
tray->showMessage("you click","hello,tray",icon,);
}
//点击了消息框后的要响应的函数
void Dialog::ShowClickMsg()
{
QMessageBox::about(,"click","you click the messagebox");
ShowNormal();
}
//模拟QQ消息到来时候,托盘图表闪动
void Dialog::qq_msg_com()
{
timer->start(); //每500ms都刷新一次
timer->setSingleShot(false); //如果为真,表示只重复一次,为假表示无限次循环
connect(timer,SIGNAL(timeout()),this,SLOT(updateIcon()));
}
//刷新托盘图标
void Dialog::updateIcon()
{
TimerCount++;
if(TimerCount%)
{
tray->setIcon(QIcon(":/new/prefix1/0")); //实际上没有这个图标,然后会显示没有图表
}
else
{
tray->setIcon(QIcon(":/new/prefix1/2"));
}
}

dialog.cpp

#include "dialog.h"
#include <QApplication> int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Dialog w;
w.show(); return a.exec();
}

main.cpp

Qt5 托盘模仿qq闪烁,弹消息框实现的更多相关文章

  1. C#代码像QQ的右下角消息框一样,无论现在用户的焦点在哪个窗口,消息框弹出后都不影响焦点的变化,那么有两种方法

    你QQ的右下角消息框一样,无论现在用户的焦点在哪个窗口,消息框弹出后都不影响焦点的变化,那么有两种方法: 要么重写需要弹出的窗体的事件: protected override CreateParams ...

  2. wing带你玩转自定义view系列(2) 简单模仿qq未读消息去除效果

    上一篇介绍了贝塞尔曲线的简单应用 仿360内存清理效果 这一篇带来一个  两条贝塞尔曲线的应用 : 仿qq未读消息去除效果. 转载请注明出处:http://blog.csdn.net/wingicho ...

  3. 模仿QQ 之弹出菜单

    #pragma once //演示QQ2009 #define WINDOW_WIDTH 250 //窗口宽度 #define WINDOW_HEIGHT 600 //窗口高度 struct xc_i ...

  4. javaFX笔记----ComboBox模仿qq账号下拉框删除账号

    myComboBox.setCellFactory( new Callback<ListView<String>, ListCell<String>>() { @O ...

  5. C# Winform 模拟QQ新闻弹出框

    一开始做的时候,觉得这个太简单了.真心做的时候还是遇到了不少的坑啊. 1)循环播放新闻内容,建议使用showdialog(),不要用show(),不太好控制前后之间的停顿. 2)窗口的初始位置为有下角 ...

  6. 反汇编EXE添加一个启动时的消息框

    反汇编EXE添加一个启动时的消息框 最近有一个要修改PE文件的需求,就先从EXE文件下手吧,我也是初学一个小时而已,不过之前接触过一点汇编罢了,这篇文章算是个DEMO,主要的思路是将其反汇编得到汇编代 ...

  7. C# 仿制QQ弹出新闻消息框

    打开QQ的时候,QQ新闻弹出窗体在屏幕的右下角就会慢慢升起一个小窗口,占用的地方不大,可以起到提示的作用.下面就让我们来看看,怎样用系统API来轻松实现这个功能. API原型函数: bool Anim ...

  8. js封装好的模仿qq消息弹窗代码

    在我们的日常开发中,或者生活中.常常须要用到弹出窗.这里我们就用js模拟一下qq消息一样的弹出窗. 直接贴代码: <!DOCTYPE html PUBLIC "-//W3C//DTD ...

  9. [Phonegap+Sencha Touch] 移动开发19 某些安卓手机上弹出消息框 点击后不消失的解决的方法

    Ext.Msg.alert等弹出框在某些安卓手机上,点击确定后不消失. 原因是: 消息框点击确定后有一段css3 transform动画,动画完毕后才会隐藏(display:none). 有些奇葩手机 ...

随机推荐

  1. 使用Newtonsoft JsonConvert反序列化Json数据到DataTable

    //JsonStr为Json字符串 JArray array = JsonConvert.DeserializeObject(JsonStr) as JArray;//反序列化为数组 ) { Stri ...

  2. 关于软件工程个人作业 Word frequency program 的总结

    一.预计花在程序各部分的时间: (1)对所给命令行参数的判断和处理,看它是否合法.是哪种模式.预计用时20min; (2)关于目录操作:遍历给定目录下的所有文件,包括子目录和非目录文件.预计用时40m ...

  3. Cpu Gpu 内存 显存 数据流

    [精]从CPU架构和技术的演变看GPU未来发展 http://www.pcpop.com/doc/0/521/521832_all.shtml 显存与纹理内存详解 http://blog.csdn.n ...

  4. Yii2 如何更好的在页面注入JavaScript

    先添加一个widgets <?php /** * User: yiqing * Date: 14-9-15 * Time: 下午12:09 */ namespace common\widgets ...

  5. asp.net webform中使用async,await实现异步操作

    摘要 最近想着将项目中的部分耗时的操作,进行异步化.就自己弄个demo进行学习.只需下面几个步骤就可以将aspx页面中注册异步操作. demo 比如我们需要抓取某个url的内容,这个时候我们可能会有下 ...

  6. css使 同一行内的 文字和图片 垂直居中对齐?

    设置父容器, 使 父容器 div 下的所有元素 都 垂直对齐: father-container *{ vertical-align:middle 找回密码

  7. 江湖救急:webbrowser中js文件丢失问题~

    页面中,有一个按钮,点击按钮通过js create 了一个 script标签 ,链接加载一个外部js文件,执行该js文件 $("#a").click(function(){ $.g ...

  8. AlwaysOn可用性组功能测试(一)--AlwaysOn故障转移测试

    具体测试环境请参考: AlwaysOn可用性组测试环境安装与配置(一)--SQL群集环境搭建 AlwaysOn可用性组测试环境安装与配置(二)--AlwaysOn配置(界面与T-SQL) 一. Alw ...

  9. ThinkPHP3.2.3 安装教程

    本文以  Windows  平台为例 安装前准备:Windows操作系统的电脑,php编程环境(配置好了Apache.MySql.php).推荐wampserver.               待安 ...

  10. 2015多校.Zero Escape (dp减枝 && 滚动数组)

    Zero Escape Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Tot ...