在别人代码基础上做的,课设刚好用上了,贴出来分享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. 9月9日HTML上午表单元素2(框架、样式表)

    五.框架 1.frameset是双标签框架集,如果使用框架集,当前页面不能有body. frameset属性:①cols代表左右拆分.cols=“300,*”表示左边框架宽300,右边宽剩余的宽度.* ...

  2. JavaWeb学习笔记——javabean

  3. 入门:HTML:hello world!

    <html> <head> </head> <body> <h1>hello world!</h1> </body> ...

  4. Fresnel Effect

    http://www.3drender.com/glossary/fresneleffect.htm http://kylehalladay.com/all/graphics/2014/02/23/F ...

  5. 升级10.11.6后CocoaPods的坑,之前10.11.4已经安装好的,居然没了Failed to locate Homebrew!

    升级10.11.6后CocoaPods的坑,之前10.11.4已经安装好的,居然没了,用命令 sudo gem install cocoapod 装不上,换 sudo gem install -n/u ...

  6. sql server 使用for xml path 将1列多行转换为字符串连接起来,俗称 sql 合并字符

    由于项目的原因,需要将一些记录分类汇总,但还要列出相关的明细,这样的需求我还是第一次遇到,蛋疼了,还是请求一下度娘吧.搜索一番还是有结果,请看以下例子: create table tb ([id] i ...

  7. Robot Framework--08 List Variables-List变量及其用法

    转自:http://blog.csdn.net/tulituqi/article/details/7907981 一.List变量及其用法 在我们前面几篇文章里用到了很多List变量,相信以后各位也会 ...

  8. C# WinForm中将Form显示在Panel中(C#)

    信息来自:http://blog.csdn.net/renyouprince/article/details/4136176 当我们在做WinForm的程序时,总是要弹出一些窗体,但弹出窗体看起来效果 ...

  9. Struts2 action的单例与多例

    struts 2的Action是多实例的并非单例,也就是每次请求产生一个Action的对象.原因是:struts 2的Action中包含数据,例如你在页面填写的数据就会包含在Action的成员变量里面 ...

  10. visio2007使用记录

    安装时, 需要有选择性的安装, 不是所有的组件 都需要安装, 如office工具, office共享功能, visio中的.net可编程支持就用不着安装.... visio中的cad(加载项), 可以 ...