【Qt编程】基于Qt的词典开发系列<十一>系统托盘的显示

简介:     本文主要讨论Qt中的系统托盘的设置。系统托盘想必大家都不陌生,最常用的就是QQ。系统托盘以简单、小巧的形式能让人们较快的打开软件。废话不多说,下面开始具体介绍。

    本文主要讨论Qt中的系统托盘的设置。系统托盘想必大家都不陌生,最常用的就是QQ。系统托盘以简单、小巧的形式能让人们较快的打开软件。废话不多说,下面开始具体介绍。


    首先,新建一个Qt Gui项目,类型选择QMainWindow,类名也选择默认的mainwindow。这时,工程项目中就有3个文件(界面文件不用管):mainwindow.h mainwindow.cpp main.cpp。然后,分别修改3个文件如下

1、mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include<QSystemTrayIcon>
#include<QMenu>
#include<QCloseEvent>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
    Q_OBJECT
    
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    
private:
    Ui::MainWindow *ui;
    QSystemTrayIcon *trayicon;//将系统托盘及菜单定义为窗口的私有成员
    QMenu *trayiconMenu;
signals:
    void exitsignal();//发射程序退出信号
private slots:
    void onSystemTrayIconClicked(QSystemTrayIcon::ActivationReason reason);
    void exit();//与退出按钮对应的槽
protected:
    void closeEvent(QCloseEvent *event);
};
#endif // MAINWINDOW_H
2、mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QtGui>
#include<QEvent>
#include<QDebug>
#include<QAction>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
     ui->setupUi(this);
    trayicon=new QSystemTrayIcon(this);
    QAction *quit=new QAction(tr("exit"), this);
    QIcon icon("D:/studytool/Qt/workspace/myTray/tengweitw.jpg");//注意修改这里的图片目录
    setWindowIcon(icon);
//    setMinimumSize(200,100);//窗口最大化和最小化一样大小。所以窗口不能放大也不能缩小
//    setMaximumSize(200,100);
    trayiconMenu=new QMenu(this);
    trayiconMenu->addAction(quit);//这里可以添加多个菜单
   // trayiconMenu->addSeparator();
    trayicon->setIcon(icon);
    trayicon->setToolTip(tr("我爱记单词"));
    trayicon->setContextMenu(trayiconMenu);
    connect(quit,SIGNAL(triggered(bool)),this,SLOT(exit()));
    connect(trayicon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(onSystemTrayIconClicked(QSystemTrayIcon::ActivationReason)));
    trayicon->show();
}
MainWindow::~MainWindow()
{
    delete ui;
}
//下面处理不同情况下,单击托盘图标的操作
void MainWindow::onSystemTrayIconClicked(QSystemTrayIcon::ActivationReason reason)
{
  switch(reason)
  {
  //单击
  case QSystemTrayIcon::Trigger:
    //  qDebug()<<this->isEnabled();
  //双击
 //     flag=!flag;
 // case QSystemTrayIcon::DoubleClick:
      //恢复窗口显示
      if(this->isVisible())//判断窗口是否可见
      {
          if(this->isMinimized())//窗口是否是最小化
            {
                this->setWindowFlags(Qt::WindowStaysOnTopHint);//置顶
            //  this->setWindowFlags(Qt::Widget);//取消置顶
                this->setWindowState(Qt::WindowActive);
                this->setGeometry(this->geometry());//使得每次显示窗口为上次的位置
                this->show();
            }
          else
                this->hide();
      }
       else
      {
          this->setWindowFlags(Qt::WindowStaysOnTopHint);//置顶
            //  this->setWindowFlags(Qt::Widget);//取消置顶
                this->setWindowState(Qt::WindowActive);
                this->setGeometry(this->geometry());
                this->show();
      }
      break;
  default:
      break;
  }
}
void MainWindow::exit()
{
    emit exitsignal();
}
void MainWindow::closeEvent(QCloseEvent *event)//处理窗口关闭事件
{
  if(trayicon->isVisible())
  {
      hide();
      this->close();
      event->ignore();
  }
}

3、main.cpp

#include <QtGui/QApplication>
#include "mainwindow.h"
#include<QTextCodec>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QTextCodec::setCodecForTr(QTextCodec::codecForLocale());//防止中文乱码
    MainWindow w;
    w.show();
    QObject::connect(&w,SIGNAL(exitsignal()),&a,SLOT(quit()));//将退出按钮与退出函数绑定
    return a.exec();
}

上面程序的主要部分都给了注释,在这就不一一分析了。运行结果如下:
1、界面如下(这不是我们关注的地方):

2、托盘显示如下:

 
3、托盘的菜单显示如下:


基于Qt的词典开发系列

  1. 词典框架设计及成品展示
  2. 本地词典的设计
  3. 开始菜单的设计
  4. 无边框窗口的缩放与拖动
  5. 无边框窗口的拖动
  6. 界面美化设计
  7. 调用网络API
  8. 用户登录及API调用的实现
  9. JSON数据解析
  10. 国际音标的显示
  11. 系统托盘的显示
  12. 调用讲述人
  13. 音频播放
  14. 自动补全功能
  15. HTML特殊字符及正则表达式
  16. 后序
作品下载地址(发布版)http://download.csdn.net/detail/tengweitw/8548767
作品下载地址(绿色版)http://download.csdn.net/detail/tengweitw/8830495
源码下载地址http://download.csdn.net/detail/tengweitw/8830503

原文:http://blog.csdn.net/tengweitw/article/details/38237203

作者:nineheadedbird




目录
相关文章
|
1月前
|
存储 Windows
(13) Qt事件系统(two)
文章详细介绍了Qt事件系统,包括事件分发、自定义事件、事件传播机制、事件过滤以及事件与信号的区别。
81 3
(13) Qt事件系统(two)
|
1月前
|
编解码 程序员
(12)Qt事件系统(one)
本文详细介绍了Qt事件系统,包括各种系统事件、鼠标事件、键盘事件、定时器等的处理方法和示例代码。
73 0
(12)Qt事件系统(one)
|
2月前
|
开发工具 C++
qt开发技巧与三个问题点
本文介绍了三个Qt开发中的常见问题及其解决方法,并提供了一些实用的开发技巧。
|
2月前
|
3月前
|
C++
C++ Qt开发:QUdpSocket网络通信组件
QUdpSocket是Qt网络编程中一个非常有用的组件,它提供了在UDP协议下进行数据发送和接收的能力。通过简单的方法和信号,可以轻松实现基于UDP的网络通信。不过,需要注意的是,UDP协议本身不保证数据的可靠传输,因此在使用QUdpSocket时,可能需要在应用层实现一些机制来保证数据的完整性和顺序,或者选择在适用的场景下使用UDP协议。
159 2
|
3月前
从源码角度分析Qt元对象系统2
从源码角度分析Qt元对象系统
55 0
|
3月前
|
存储
从源码角度分析Qt元对象系统1
从源码角度分析Qt元对象系统
79 0
|
4月前
|
数据安全/隐私保护 C++ 计算机视觉
Qt(C++)开发一款图片防盗用水印制作小工具
文本水印是一种常用的防盗用手段,可以将文本信息嵌入到图片、视频等文件中,用于识别和证明文件的版权归属。在数字化和网络化的时代,大量的原创作品容易被不法分子盗用或侵犯版权,因此加入文本水印成为了保护原创作品和维护知识产权的必要手段。 通常情况下,文本水印可以包含版权声明、制作者姓名、日期、网址等信息,以帮助识别文件的来源和版权归属。同时,为了增强防盗用效果,文本水印通常会采用字体、颜色、角度等多种组合方式,使得水印难以被删除或篡改,有效地降低了盗用意愿和风险。 开发人员可以使用图像处理技术和编程语言实现文本水印的功能,例如使用Qt的QPainter类进行文本绘制操作,将文本信息嵌入到图片中,
181 1
Qt(C++)开发一款图片防盗用水印制作小工具
|
3月前
|
监控 C++ 容器
【qt】MDI多文档界面开发
【qt】MDI多文档界面开发
90 0
Qt开发网络嗅探器02
Qt开发网络嗅探器02
下一篇
无影云桌面