【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的词典开发系列<四>--无边框窗口的缩放与拖动
在现在,绝大多数软件都向着简洁,时尚发展.就拿有道的单词本和我做的单词本来说,绝大多数用户肯定喜欢我所做的单词本(就单单界面,关于颜色搭配和布局问题,大家就不要在意了). 有道的单词本: 我所做的单词 ...
随机推荐
- PLSQL程序编写杂烦数据表信息编写批量排版
--PLSQL程序编写杂烦数据表信息编写批量排版 SELECT 'cra.' || lower(t.column_name) ||',' FROM dba_tab_columns t WHERE t. ...
- mysql 远程连接配置
近期买了阿里云服务器,服务器 安装了mysql,需要远程操作mysql数据库,但是远程不配置的话,连接不上去的.需要配置 .具体的配置如下: 先看看my.cnf是否绑定了本机,如果绑定了地址就解绑吧. ...
- iOS开发之UIWebView的常见一些用法
虽然现在Xcode8已经开始使用WKWebView这个框架进行网页展示,但是UIWebView也有一些常用的方法需要知道,下面就简单展示一下,仅供大家参考 相关知识:1.设置背景透明:2.加载本地HT ...
- TortoiseSVN使用
TortoiseSVN是Subversion版本控制系统的一个免费开源客户端,不需要为使用它而付费. TortoiseSVN是 Subversion 的 Windows 扩展.它使你避免接触 Subv ...
- JSP自定义方法库
如果JSTL的方法库没有满足需要,可以使用自定义方法进行扩展 public class Function{ public static int length(Object obj){ //返回对象的长 ...
- 自守数算法----C语言实现
#include <stdio.h> //自守数算法 //ep : 25 ^ 2 = 625 76 ^ 2 = 5776 9376 ^ 2 = 87909376 /*ep : * 376 ...
- Tomcat内核之Tomcat的类加载器
跟其他主流的Java Web服务器一样,Tomcat也拥有不同的自定义类加载器,达到对各种资源库的控制.一般来说,Java Web服务器需要解决以下四个问题: ① 同一个Web服务器里,各个Web ...
- Python图片处理库之PIL
这个模块对于Python2.7 的windows64位电脑而言,还真的是不好找啊.这里分享一个下载链接吧,需要的朋友可以下载下来.PIL For Windows64 Python2.7下面分享一下这个 ...
- (NO.00004)iOS实现打砖块游戏(八):游戏中小球与砖块的碰撞
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 现在回到GameScene.m中,我们所有的碰撞处理就放在该类中 ...
- JSP自定义标签必知必会
自定义标签技术自sun公司发布以来,便一向很受欢迎!下面我就来谈一谈如何实现自定义标签,以及如何使用自定义标签. 如何实现自定义标签 首先我们应该知道原理,不管是标签还是JSP,本身实际上都会被JSP ...