【Qt编程】基于Qt的词典开发系列<十一>系统托盘的显示
本文主要讨论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的词典开发系列
- 词典框架设计及成品展示
- 本地词典的设计
- 开始菜单的设计
- 无边框窗口的缩放与拖动
- 无边框窗口的拖动
- 界面美化设计
- 调用网络API
- 用户登录及API调用的实现
- JSON数据解析
- 国际音标的显示
- 系统托盘的显示
- 调用讲述人
- 音频播放
- 自动补全功能
- HTML特殊字符及正则表达式
- 后序
原文:http://blog.csdn.net/tengweitw/article/details/38237203
作者:nineheadedbird
【Qt编程】基于Qt的词典开发系列<十一>系统托盘的显示的更多相关文章
- 【Qt编程】基于Qt的词典开发系列<二>--本地词典的设计
我设计的词典不仅可以实现在线查单词,而且一个重大特色就是具有丰富的本地词典库:我默认加入了八个类型的词典,如下所示: 由于是本人是通信专业,因此加入了华为通信词典.电子工程词典,又由于我喜爱编程,也加 ...
- 【Qt编程】基于Qt的词典开发系列--后序
从去年八月份到现在,总算完成了词典的编写以及相关技术文档的编辑工作.从整个过程来说,文档的编写比程序的实现耗费的时间更多.基于Qt的词典开发系列文章,大致包含了在编写词典软件过程中遇到的技术重点与难点 ...
- 【Qt编程】基于Qt的词典开发系列<六>--界面美化设计
本文讲一讲界面设计,作品要面向用户,界面设计的好坏直接影响到用户的体验.现在的窗口设计基本都是扁平化的,你可以从window XP与window 8的窗口可以明显感觉出来.当然除了窗口本身的效果,窗口 ...
- 【Qt编程】基于Qt的词典开发系列<三>--开始菜单的设计
这篇文章讲讲如何实现开始菜单(或者称为主菜单)的设计.什么是开始菜单呢?我们拿常用的软件来用图例说明,大多数软件的开始菜单在左下角,如下图: 1.window 7的开始菜单 2.有道词典的主菜单 3. ...
- 【Qt编程】基于Qt的词典开发系列<一>--词典框架设计及成品展示
去年暑假的时候,作为学习Qt的实战,我写了一个名为<我爱查词典>的词典软件.后来由于导师项目及上课等原因,时间不足,所以该软件的部分功能欠缺,性能有待改善.这学期重新拿出来看时,又有很多东 ...
- 【Qt编程】基于Qt的词典开发系列<十>--国际音标的显示
在年前的一篇文章中,我提到要学习Qt.于是在这学期看了一个月的qt.现在大致对qt有了一些了解.但是现在导师又把我调到了android应用开发平台,所以说qt的学习要搁置了.本打算这学期做一个单词查询 ...
- 【Qt编程】基于Qt的词典开发系列<十二>调用讲述人
我们知道,win7系统自带有讲述人,即可以机器读出当前内容,具体可以将电脑锁定,然后点击左下角的按钮即可.之前在用Matlab写扫雷游戏的时候,也曾经调用过讲述人来进行游戏的语音提示.具体的Matla ...
- 【Qt编程】基于Qt的词典开发系列<五>--无边框窗口的拖动
在上一篇文章中,我们讲述了如何进行无边框窗口的缩放与拖动,而在一些情况下,我们的窗口只需要进行拖动也不需要改变其大小,比如:QQ的登录窗口.本来在上一篇文章中已经讲述了如何进行窗口的拖动,但是却与窗口 ...
- 【Qt编程】基于Qt的词典开发系列<四>--无边框窗口的缩放与拖动
在现在,绝大多数软件都向着简洁,时尚发展.就拿有道的单词本和我做的单词本来说,绝大多数用户肯定喜欢我所做的单词本(就单单界面,关于颜色搭配和布局问题,大家就不要在意了). 有道的单词本: 我所做的单词 ...
随机推荐
- mysql进阶(二十七)数据库索引原理
mysql进阶(二十七)数据库索引原理 前言 本文主要是阐述MySQL索引机制,主要是说明存储引擎Innodb. 第一部分主要从数据结构及算法理论层面讨论MySQL数据库索引的数理基础. ...
- J2EE规范标准
J2EE是一个很大的平台体系,提供了很多服务.程序接口.协议等.这么庞大的体系必须要由一系列的标准进行规范,不然将会一片混乱.通过这些规范好的接口来开发程序将会使程序更加强壮.更加有生命力.总的来说, ...
- wget 常用参数释义
wget 大法好啊,废话不多说,下面开始wget之旅吧. 下载限速 wget命令有一个内建的选项可以先顶下载任务占有的最大的带宽,从而保证其他应用程序的流畅运行. 具体使用--limit-rate 数 ...
- Effective C++ ——设计与声明
条款18:让接口更容易的被使用,不易误用 接口设计主要是给应用接口的人使用的,他们可能不是接口的设计者,这样作为接口的设计者就要对接口的定义更加易懂,让使用者不宜发生误用,例如对于一个时间类: cla ...
- Android状态栏透明(沉浸式效果)
Android状态栏透明(沉浸式效果) 默认效果 沉浸式效果 方式一 源码 下载地址(Android Studio工程):http://download.csdn.net/detail/q487880 ...
- FORM当前状态分析
变量 SYSTEM.RECORD_STATUS 确定当前记录状态.有四种返回值:CHANGED表示记录从数据库取来,并且该记录至少一个基表列被更新:INSERT表示给一个非取自数据库记录的基表 ...
- 剑指offer面试题4 替换空格(c)
- Android View框架总结(七)View事件分发机制
请尊重分享成果,转载请注明出处: http://blog.csdn.net/hejjunlin/article/details/52282833 View布局告一段落,从本篇开始View事件相关分析, ...
- Android项目开发填坑记-Fragment的onAttach
背景 现在Android开发多使用一个Activity管理多个Fragment进行开发,不免需要两者相互传递数据,一般是给Fragment添加回调接口,让Activity继承并实现. 回调接口一般都写 ...
- 【一天一道LeetCode】#172. Factorial Trailing Zeroes
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...