paip.提升用户体验------c++ Qt5 实现程序图标以及动态托盘闪烁图标

时间:2022-06-01 18:59:07
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