Qt5 托盘模仿qq闪烁,弹消息框实现
在别人代码基础上做的,课设刚好用上了,贴出来分享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闪烁,弹消息框实现的更多相关文章
- C#代码像QQ的右下角消息框一样,无论现在用户的焦点在哪个窗口,消息框弹出后都不影响焦点的变化,那么有两种方法
你QQ的右下角消息框一样,无论现在用户的焦点在哪个窗口,消息框弹出后都不影响焦点的变化,那么有两种方法: 要么重写需要弹出的窗体的事件: protected override CreateParams ...
- wing带你玩转自定义view系列(2) 简单模仿qq未读消息去除效果
上一篇介绍了贝塞尔曲线的简单应用 仿360内存清理效果 这一篇带来一个 两条贝塞尔曲线的应用 : 仿qq未读消息去除效果. 转载请注明出处:http://blog.csdn.net/wingicho ...
- 模仿QQ 之弹出菜单
#pragma once //演示QQ2009 #define WINDOW_WIDTH 250 //窗口宽度 #define WINDOW_HEIGHT 600 //窗口高度 struct xc_i ...
- javaFX笔记----ComboBox模仿qq账号下拉框删除账号
myComboBox.setCellFactory( new Callback<ListView<String>, ListCell<String>>() { @O ...
- C# Winform 模拟QQ新闻弹出框
一开始做的时候,觉得这个太简单了.真心做的时候还是遇到了不少的坑啊. 1)循环播放新闻内容,建议使用showdialog(),不要用show(),不太好控制前后之间的停顿. 2)窗口的初始位置为有下角 ...
- 反汇编EXE添加一个启动时的消息框
反汇编EXE添加一个启动时的消息框 最近有一个要修改PE文件的需求,就先从EXE文件下手吧,我也是初学一个小时而已,不过之前接触过一点汇编罢了,这篇文章算是个DEMO,主要的思路是将其反汇编得到汇编代 ...
- C# 仿制QQ弹出新闻消息框
打开QQ的时候,QQ新闻弹出窗体在屏幕的右下角就会慢慢升起一个小窗口,占用的地方不大,可以起到提示的作用.下面就让我们来看看,怎样用系统API来轻松实现这个功能. API原型函数: bool Anim ...
- js封装好的模仿qq消息弹窗代码
在我们的日常开发中,或者生活中.常常须要用到弹出窗.这里我们就用js模拟一下qq消息一样的弹出窗. 直接贴代码: <!DOCTYPE html PUBLIC "-//W3C//DTD ...
- [Phonegap+Sencha Touch] 移动开发19 某些安卓手机上弹出消息框 点击后不消失的解决的方法
Ext.Msg.alert等弹出框在某些安卓手机上,点击确定后不消失. 原因是: 消息框点击确定后有一段css3 transform动画,动画完毕后才会隐藏(display:none). 有些奇葩手机 ...
随机推荐
- WSADATA
中文名 WSADATA 操作系统 Windows CE 版本: 大于等于1.0 定义位置: Winsock.h 目录 1 说明 2 结构原型 3 参数说明 4 备注 说明编辑 WSADATA结构被用来 ...
- push submodule
git status git add sparx git commit -m "message" git push
- 菜鸟疑问之新建网站与新建web应用程序区别
学习asp.net一定少不了这困惑:新建网站与新建web应用程序有什么区别? 新建web应用程序 新建网站 呵呵,其实从名字看一个是webApplication,一个是webSite.名字不同罢了? ...
- LINQ的左连接、右连接、内连接
.左连接: var LeftJoin = from emp in ListOfEmployees join dept in ListOfDepartment on emp.DeptID equals ...
- 浅谈JavaScript中的继承
引言 在JavaScript中,实现继承的主要方式是通过原型链技术.这一篇文章我们就通过介绍JavaScript中实现继承的几种方式来慢慢领会JavaScript中继承实现的点点滴滴. 原型链介绍 原 ...
- SQL查询表字段的信息
如题,代码: select * from information_schema.columns where table_name = 'TableName'
- APACHE POI教程 --java应用程序用POI与Excel交互
POI报表 --用POI与Excel交互 AURISOFT 第一章 POI简介 --Jakata Poi HSSF:纯java的Excel解决方案 在我们实际的开发中,表现层的解决方案虽然有多样,但是 ...
- jquery 清除动画队列不疑惑
$(this).siblings().stop().fadeTo(200, 0.3); jquery动画存在一个队列, 会把事件产生的动画 放在一个队列中,当来不及执行这些事件队列的时候,会在事件结束 ...
- Linux服务器管理: 系统管理:系统资源查看
vmstat 命令: 查看或监控系统资源 [root@localhostA1 ~]# vmstat procs -----------memory---------- ---swap-- -----i ...
- c# 字符串前加@
@在c#中为强制不转义的符号,在里面的转义字符无效. 例如:Console.WriteLine("你好\t吗?"); Console.WriteLine(@"你好\t吗& ...