paip.提升用户体验------c++ Qt5 实现程序图标以及动态托盘闪烁图标
作者Attilax , EMAIL:1466519819@qq.com
来源:attilax的专栏
地址:http://blog.csdn.net/attilax
1.应用程序图标:
----------------------------
RC_ICONS = default.ico .默认路径是项目path..会编译到个exe黑头..
2.系统托盘图标:
-------------------------
#include <QtGui>
#include <QSystemTrayIcon>
下列的代码放的个构造函数黑头..
//c923 style tyay icon
pannelIcon = new QSystemTrayIcon(this);
pannelIcon->setIcon(QIcon("tray.ico"));
pannelIcon->show();
pannelIcon->
setToolTip("tray tip c923");
//设置托盘图标的提示信息
不过.会发现显示不出来.主要十路径问题..tray.ico的路径.
跟踪查看进程工作路径working directory
-------------------------------------------------------
processexporlere , ritkey>prroper> image >curr dir >> 视图当前working directory..
发现到个build路径..
要更改路径到个qtc2.8的.>>projects> build & run >>run settting >>run working derictory ....不过一般不需要更改这个.
加个run step,让qtc 运行的之前不个 *.ico复制到个build路径.走OK兰..
command: cmd.exe
arguments: /c copy %{sourceDir}\*.ico %{buildDir}
working dericetory: %{buildDir} (default)
路径要用反斜杠了..用斜杠错误.
D:\qtworkspace\atiqtc9/tray.ico D:\qtworkspace\build-atiqtc9-deskc9-Debug // 命令语法不正确。 注意
copy D:\qtworkspace\atiqtc9\tray.ico D:\qtworkspace\build-atiqtc9-deskc9-Debug
查看cqt变量内容
-----------------------
直接输入类k上面走出来兰..
3.动态托盘闪烁图标:
----------------------------
这个走要用timer实现兰..不过比较的时候发现.
QSystemTrayIcon->icon(); // if( &QSystemTrayIcon_cur==&ico_a) 地址不一样,日怪兰..只好用个int变量来标示.
源码主要下列的:
------h文件加个slot 声明
private slots:
//c923 flashicon timer
void dosomethings();
////c923
-----cpp
#include <QtGui>
#include <QSystemTrayIcon>
#include <QTimer>
//c923 style tyay icon
QSystemTrayIcon* pannelIcon ;
//c923 //timer flash icon
QIcon ico_a;
QIcon ico_b;
int curIcon=0;
///c923
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->setAcceptDrops(true);
//setAcceptDrops(true); // [[1]]: 使label可接受拖放操作
//c923 style tyay icon
pannelIcon = new QSystemTrayIcon(this);
pannelIcon->setIcon(QIcon("tray.ico"));
pannelIcon->show();
pannelIcon->
setToolTip("tray tip c923");
//设置托盘图标的提示信息
//void show() //该函数适用于显示托盘图标的函数
//void
showMessage(const QString & title, const QString & message,...)
//timer flash icon
ico_a =QIcon("tray.ico");
ico_b=QIcon("default.ico");
QTimer* timer=new QTimer(this);
connect(timer,SIGNAL(timeout()),this,SLOT(dosomethings()));
timer->start(400);
////c923
}
//c923 //timer flash icon
void MainWindow::dosomethings()
{
qDebug() << "---timer event start--";
//do something qDebug() << filename;
QIcon qi=pannelIcon->icon();
// if( &qi==&ico_a)
if(curIcon==0)
{
pannelIcon->setIcon(ico_b);
curIcon=1;
}
else
{curIcon=0;
pannelIcon->setIcon(ico_a);
}
pannelIcon->show();
// emit outlogtext("abc");
}
////c923
参考:
C++用new来创建对象和非new来创建对象的区别 - GOD_YCA - 博客园.htm
在Qt Creator2.3中 qmake 建立 时设置自己的 环境变量! - jtop0的专栏 - 博客频道 - CSDN.NET.htm
Qt5:QSystemTrayIcon类实现程序托盘图标 - wowk - 博客园.htm
dist changes-2.2.0 in qt-creator qt-creator master - Qt by Digia.htm
Qt中timer使用 - 懒人的技术笔记 - 博客频道 - CSDN.NET.htm
Qt 定时器Timer使用 - PY4NT的日志 - 网易博客.htm