【linux】【qt5界面】【系统托盘图标的实现】

前言:

  博主最近在做一个聊天软件,虽然技术不咋滴,但遇到点干货肯定是要跟大家分享的啦。下面就给大家分享一个qt实现程序隐藏才系统托盘的技巧。

装备:

  系统:linux,

  qt版本:5.9.2,GCC:4.9.3.

1.头文件声明:

      QSystemTrayIcon *mSysTrayIcon;  //记得头文件

      void on_activatedSysTrayIcon(QSystemTrayIcon::ActivationReason reason);//槽函数的声明

2.窗口初始化时创建托盘对象:

  //新建QSystemTrayIcon对象
  mSysTrayIcon = new QSystemTrayIcon(this);
      //新建托盘要显示的icon
      QIcon icon = QIcon(":/new/images/im_icon.png");
      //将icon设到QSystemTrayIcon对象中
      mSysTrayIcon->setIcon(icon);
      //当鼠标移动到托盘上的图标时,会显示此处设置的内容
      mSysTrayIcon->setToolTip(QObject::trUtf8("xxx客户端"));
      //给QSystemTrayIcon添加槽函数
      connect(mSysTrayIcon,SIGNAL(activated(QSystemTrayIcon::ActivationReason)),this,SLOT(on_activatedSysTrayIcon(QSystemTrayIcon::ActivationReason)));
      //在系统托盘显示此对象
      mSysTrayIcon->show();

3.槽函数实现点击事件。

  //系统托盘功能
  void ocswk::on_activatedSysTrayIcon(QSystemTrayIcon::ActivationReason reason)
  {
      switch(reason){
      case QSystemTrayIcon::Trigger:
          //单击托盘图标,显示窗体
          this->show();
          break;
      case QSystemTrayIcon::DoubleClick:
          //双击托盘图标
          //双击后显示主程序窗口
          QMessageBox::information(this,"xxx", "xxxxxx");
          break;
      default://还有个右键事件没写。
          break;
    }
}

4.体现图标作用:决定是否退出程序或缩小图标

// closeEvents
void ocswk::closeEvent(QCloseEvent *event)
{
    QMessageBox button(QMessageBox::Warning, QString(tr("退出程序")),QString(tr("确认退出程序!")));
    button.setStandardButtons (QMessageBox::Yes|QMessageBox::No);
    button.setSizeIncrement(250,120);
    button.setButtonText (QMessageBox::Yes,QString("确定退出"));
    button.setButtonText (QMessageBox::No,QString("缩小托盘"));

    if(button.exec() != QMessageBox::Yes)
    {
        this->hide();
        event->ignore();
    }else{
        event->accept();
    }

}

5.图标抖动:来消息图标抖动事件还没完成(其实俺也不会啊),等后续更新吧。

原文地址:https://www.cnblogs.com/13373-/p/11347934.html