BlueStacksc 程序最小化到托盘托盘图标怎么打开程序界面

QT/Misc(3)
1.功能说明
对于GUI程序,如果想要实现当最小化时,程序从任务栏消失,在系统托盘显示一个图标,表示此程序,并能在托盘内通过双击或者菜单使程序界面恢复。
2.使用的类
主要使用的此类:QSystemTrayIcon。
其中QSystemTrayIcon是主要操作系统托盘的操作类,通过此类,可以在托盘显示指定程序的图标,响应用户鼠标的单击,双击,或wheel操作(好像只对X11系统有用),显示指定消息,显示菜单等。
此类中有两个枚举类型,分别如下:
enum QSystemTrayIcon::ActivationReason 表述托盘上图标的触发缘由
QSystemTrayIcon::Unknown
QSystemTrayIcon::Context
请求系统托盘的上下文菜单
QSystemTrayIcon::DoubleClick
QSystemTrayIcon::Trigger
QSystemTrayIcon::MiddleClick
鼠标中间按键
enum QSystemTrayIcon::MessageIcon 当显示气球消息时显示的图片
QSystemTrayIcon::NoIcon
不显示图标
QSystemTrayIcon::Information
显示信息图标
QSystemTrayIcon::Warning
显示告警图标
QSystemTrayIcon::Critical
显示致命图标
3.QSystemTrayIcon常用函数
void setIcon(const QIcon& icon)
设置系统托盘的图标
void setToolTip(const QString &tip)
设置鼠标放到图标上的提示文字
void setContextMenu(QMenu* menu);
设置当点击图标弹出的菜单
void show()
显示系统托盘图标
1.实现程序托盘显示
a)新建一个QWidget程序,在界面上放入一个QPushButton,text改为“最小化”,如下图:
b)给工程加入Qt Resource资源文件,添加一个在托盘显示的icon图片,如图:
c)给a中的QPushButton,建立槽函数,在槽函数内实现程序最小化托盘显示
&code class=&hljs lasso has-numbering&&&span class=&hljs-literal&&void&/span& MainWindow&span class=&hljs-tag&&::on_pushButton_clicked&/span&()
&span class=&hljs-comment&&//隐藏程序主窗口&/span&
this&span class=&hljs-subst&&-&&/span&hide();
&span class=&hljs-comment&&//新建QSystemTrayIcon对象&/span&
mSysTrayIcon &span class=&hljs-subst&&=&/span& &span class=&hljs-literal&&new&/span& QSystemTrayIcon(this);
&span class=&hljs-comment&&//新建托盘要显示的icon&/span&
QIcon icon &span class=&hljs-subst&&=&/span& QIcon(&span class=&hljs-string&&&../IMClient/Resources/GG64.png&&/span&);
&span class=&hljs-comment&&//将icon设到QSystemTrayIcon对象中&/span&
mSysTrayIcon&span class=&hljs-subst&&-&&/span&setIcon(icon);
&span class=&hljs-comment&&//当鼠标移动到托盘上的图标时,会显示此处设置的内容&/span&
mSysTrayIcon&span class=&hljs-subst&&-&&/span&setToolTip(QObject&span class=&hljs-tag&&::trUtf8&/span&(&span class=&hljs-string&&&测试系统托盘图标&&/span&));
&span class=&hljs-comment&&//在系统托盘显示此对象&/span&
mSysTrayIcon&span class=&hljs-subst&&-&&/span&show();
}&/code&&ul style=&& class=&pre-numbering&&&li&1&/li&&li&2&/li&&li&3&/li&&li&4&/li&&li&5&/li&&li&6&/li&&li&7&/li&&li&8&/li&&li&9&/li&&li&10&/li&&li&11&/li&&li&12&/li&&li&13&/li&&li&14&/li&&li&15&/li&&li&16&/li&&/ul&
运行程序,点击按钮最小化,可以在系统托盘看到此图标,鼠标移到上面,可以见看见代码中所设的”测试系统托盘图标”文本,如图:
2.实现托盘图标操作
最小化后显示在系统托盘内,此时除了在任务管理器中结束此程序,无法再做其他操作,而我们还想实现双击图标显示主界面,单击图标弹出菜单等实现其他操作,此时,就需要使用QSystemTrayIcon::ActivationReason属性了。
a)给QSystemTrayIcon对象添加信号为activated(QSystemTrayIcon::ActivationReason)的槽函数
b)在槽函数内,对双击事件,显示主窗口界面
代码如下:
&code class=&hljs lasso has-numbering&&&span class=&hljs-literal&&void&/span& MainWindow&span class=&hljs-tag&&::on_pushButton_clicked&/span&()
&span class=&hljs-comment&&//隐藏主窗口&/span&
this&span class=&hljs-subst&&-&&/span&hide();
&span class=&hljs-attribute&&...&/span&&span class=&hljs-attribute&&...&/span&
&span class=&hljs-comment&&//当鼠标移动到托盘上的图标时,会显示此处设置的内容&/span&
mSysTrayIcon&span class=&hljs-subst&&-&&/span&setToolTip(QObject&span class=&hljs-tag&&::trUtf8&/span&(&span class=&hljs-string&&&测试系统托盘图标&&/span&));
&span class=&hljs-comment&&//给QSystemTrayIcon添加槽函数&/span&
connect(mSysTrayIcon,SIGNAL(activated(QSystemTrayIcon&span class=&hljs-tag&&::ActivationReason&/span&)),this,SLOT(on_activatedSysTrayIcon(QSystemTrayIcon&span class=&hljs-tag&&::ActivationReason&/span&)));
&span class=&hljs-comment&&//在系统托盘显示此对象&/span&
mSysTrayIcon&span class=&hljs-subst&&-&&/span&show();
&span class=&hljs-literal&&void&/span& MainWindow&span class=&hljs-tag&&::on_activatedSysTrayIcon&/span&(QSystemTrayIcon&span class=&hljs-tag&&::ActivationReason&/span& reason)
switch(reason){
&span class=&hljs-keyword&&case&/span& QSystemTrayIcon&span class=&hljs-tag&&::Trigger&/span&:
&span class=&hljs-comment&&//单击托盘图标&/span&
&span class=&hljs-keyword&&case&/span& QSystemTrayIcon&span class=&hljs-tag&&::DoubleClick&/span&:
&span class=&hljs-comment&&//双击托盘图标&/span&
&span class=&hljs-comment&&//双击后显示主程序窗口&/span&
this&span class=&hljs-subst&&-&&/span&show();
}&/code&&ul style=&& class=&pre-numbering&&&li&1&/li&&li&2&/li&&li&3&/li&&li&4&/li&&li&5&/li&&li&6&/li&&li&7&/li&&li&8&/li&&li&9&/li&&li&10&/li&&li&11&/li&&li&12&/li&&li&13&/li&&li&14&/li&&li&15&/li&&li&16&/li&&li&17&/li&&li&18&/li&&li&19&/li&&li&20&/li&&li&21&/li&&li&22&/li&&li&23&/li&&li&24&/li&&li&25&/li&&li&26&/li&&li&27&/li&&li&28&/li&&/ul&
程序最小化后,双击托盘图标,程序的主界面可以显示了。
最后再来考虑在单击系统托盘图标时,显示菜单功能。根据上面描述,思路很明确了,如下:
a)新建一个QMenu menu
b)将menu通过QSystemTrayIcon的setContextMenu函数设置到QSystemTrayIcon对象中
再来看代码实现:
在头文件中新增:
&code class=&hljs r has-numbering&&
QAction *mShowMainA
QAction *mExitAppA
&span class=&hljs-keyword&&...&/span&
void createActions();
void createMenu();
&span class=&hljs-keyword&&...&/span&
private slots:
&span class=&hljs-keyword&&...&/span&
void on_showMainAction();
void on_exitAppAction();&/code&&ul style=&& class=&pre-numbering&&&li&1&/li&&li&2&/li&&li&3&/li&&li&4&/li&&li&5&/li&&li&6&/li&&li&7&/li&&li&8&/li&&li&9&/li&&li&10&/li&&li&11&/li&&li&12&/li&&/ul&
在cpp中实现:
&code class=&hljs lasso has-numbering&&&span class=&hljs-literal&&void&/span& MainWindow&span class=&hljs-tag&&::createActions&/span&()
mShowMainAction &span class=&hljs-subst&&=&/span& &span class=&hljs-literal&&new&/span& QAction(QObject&span class=&hljs-tag&&::trUtf8&/span&(&span class=&hljs-string&&&显示主界面&&/span&),this);
connect(mShowMainAction,SIGNAL(triggered()),this,SLOT(on_showMainAction()));
mExitAppAction &span class=&hljs-subst&&=&/span& &span class=&hljs-literal&&new&/span& QAction(QObject&span class=&hljs-tag&&::trUtf8&/span&(&span class=&hljs-string&&&退出&&/span&),this);
connect(mExitAppAction,SIGNAL(triggered()),this,SLOT(on_exitAppAction()));
&span class=&hljs-literal&&void&/span& MainWindow&span class=&hljs-tag&&::createMenu&/span&()
mMenu &span class=&hljs-subst&&=&/span& &span class=&hljs-literal&&new&/span& QMenu(this);
&span class=&hljs-comment&&//新增菜单项---显示主界面&/span&
mMenu&span class=&hljs-subst&&-&&/span&addAction(mShowMainAction);
&span class=&hljs-comment&&//增加分隔符&/span&
mMenu&span class=&hljs-subst&&-&&/span&addSeparator();
&span class=&hljs-comment&&//新增菜单项---退出程序&/span&
mMenu&span class=&hljs-subst&&-&&/span&addAction(mExitAppAction);
&span class=&hljs-comment&&//把QMenu赋给QSystemTrayIcon对象&/span&
mSysTrayIcon&span class=&hljs-subst&&-&&/span&setContextMenu(mMenu);
&span class=&hljs-comment&&/*
* 当在系统托盘点击菜单内的显示主界面操作
&span class=&hljs-literal&&void&/span& MainWindow&span class=&hljs-tag&&::on_showMainAction&/span&()
this&span class=&hljs-subst&&-&&/span&show();
&span class=&hljs-comment&&/*
* 当在系统托盘点击菜单内的退出程序操作
&span class=&hljs-literal&&void&/span& MainWindow&span class=&hljs-tag&&::on_exitAppAction&/span&()
exit(&span class=&hljs-number&&0&/span&);
}&/code&&ul style=&& class=&pre-numbering&&&li&1&/li&&li&2&/li&&li&3&/li&&li&4&/li&&li&5&/li&&li&6&/li&&li&7&/li&&li&8&/li&&li&9&/li&&li&10&/li&&li&11&/li&&li&12&/li&&li&13&/li&&li&14&/li&&li&15&/li&&li&16&/li&&li&17&/li&&li&18&/li&&li&19&/li&&li&20&/li&&li&21&/li&&li&22&/li&&li&23&/li&&li&24&/li&&li&25&/li&&li&26&/li&&li&27&/li&&li&28&/li&&li&29&/li&&li&30&/li&&li&31&/li&&li&32&/li&&li&33&/li&&li&34&/li&&li&35&/li&&li&36&/li&&li&37&/li&&/ul&
&code class=&hljs lasso has-numbering&&&span class=&hljs-literal&&void&/span& MainWindow&span class=&hljs-tag&&::on_pushButton_clicked&/span&()
&span class=&hljs-attribute&&...&/span&&span class=&hljs-attribute&&...&/span&
&span class=&hljs-comment&&//给QSystemTrayIcon添加槽函数&/span&
connect(mSysTrayIcon,SIGNAL(activated(QSystemTrayIcon&span class=&hljs-tag&&::ActivationReason&/span&)),this,SLOT(on_activatedSysTrayIcon(QSystemTrayIcon&span class=&hljs-tag&&::ActivationReason&/span&)));
&span class=&hljs-comment&&//建立托盘操作的菜单&/span&
createActions();
createMenu();
&span class=&hljs-comment&&//在系统托盘显示此对象&/span&
mSysTrayIcon&span class=&hljs-subst&&-&&/span&show();
}&/code&&ul style=&& class=&pre-numbering&&&li&1&/li&&li&2&/li&&li&3&/li&&li&4&/li&&li&5&/li&&li&6&/li&&li&7&/li&&li&8&/li&&li&9&/li&&li&10&/li&&li&11&/li&&li&12&/li&&/ul&
最后再看看消息球的使用
&code class=&hljs lasso has-numbering&&&span class=&hljs-literal&&void&/span& MainWindow&span class=&hljs-tag&&::on_activatedSysTrayIcon&/span&(QSystemTrayIcon&span class=&hljs-tag&&::ActivationReason&/span& reason)
switch(reason){
&span class=&hljs-keyword&&case&/span& QSystemTrayIcon&span class=&hljs-tag&&::Trigger&/span&:
&span class=&hljs-comment&&//显示消息球,1s后自动消失&/span&
&span class=&hljs-comment&&//第一个参数是标题&/span&
&span class=&hljs-comment&&//第二个参数是消息内容&/span&
&span class=&hljs-comment&&//第三个参数图标&/span&
&span class=&hljs-comment&&//第四个参数是超时毫秒数&/span&
mSysTrayIcon&span class=&hljs-subst&&-&&/span&showMessage(QObject&span class=&hljs-tag&&::trUtf8&/span&(&span class=&hljs-string&&&Message Title&&/span&),
QObject&span class=&hljs-tag&&::trUtf8&/span&(&span class=&hljs-string&&&欢迎使用此程序&&/span&),
QSystemTrayIcon&span class=&hljs-tag&&::Information&/span&,
&span class=&hljs-number&&1000&/span&);
&span class=&hljs-keyword&&case&/span& QSystemTrayIcon&span class=&hljs-tag&&::DoubleClick&/span&:
this&span class=&hljs-subst&&-&&/span&show();
}&/code&&ul style=&& class=&pre-numbering&&&li&1&/li&&li&2&/li&&li&3&/li&&li&4&/li&&li&5&/li&&li&6&/li&&li&7&/li&&li&8&/li&&li&9&/li&&li&10&/li&&li&11&/li&&li&12&/li&&li&13&/li&&li&14&/li&&li&15&/li&&li&16&/li&&li&17&/li&&li&18&/li&&li&19&/li&&li&20&/li&&li&21&/li&&/ul&
关于系统托盘操作的笔记就记录到此了,最后是完整代码的实现。
&code class=&hljs cs has-numbering&&&span class=&hljs-preprocessor&&#ifndef MAINWINDOW_H&/span&
&span class=&hljs-preprocessor&&#&span class=&hljs-keyword&&define&/span& MAINWINDOW_H&/span&
&span class=&hljs-preprocessor&&#include &QMainWindow&&/span&
&span class=&hljs-preprocessor&&#include &QSystemTrayIcon&&/span&
&span class=&hljs-preprocessor&&#include &QMenu&&/span&
&span class=&hljs-preprocessor&&#include &QAction&&/span&
namespace Ui {
class MainW
class MainWindow : &span class=&hljs-keyword&&public&/span& QMainWindow
&span class=&hljs-keyword&&public&/span&:
&span class=&hljs-keyword&&explicit&/span& &span class=&hljs-title&&MainWindow&/span&(QWidget *parent = &span class=&hljs-number&&0&/span&);
~MainWindow();
&span class=&hljs-keyword&&public&/span&:
QSystemTrayIcon *mSysTrayI
QAction *mShowMainA
QAction *mExitAppA
&span class=&hljs-keyword&&public&/span&:
&span class=&hljs-keyword&&void&/span& &span class=&hljs-title&&createActions&/span&();
&span class=&hljs-keyword&&void&/span& createMenu();
&span class=&hljs-keyword&&private&/span& slots:
&span class=&hljs-keyword&&void&/span& &span class=&hljs-title&&on_pushButton_clicked&/span&();
&span class=&hljs-keyword&&void&/span& on_activatedSysTrayIcon(QSystemTrayIcon::ActivationReason reason);
&span class=&hljs-keyword&&void&/span& on_showMainAction();
&span class=&hljs-keyword&&void&/span& on_exitAppAction();
&span class=&hljs-keyword&&private&/span&:
Ui::MainWindow *
&span class=&hljs-preprocessor&&#&span class=&hljs-keyword&&endif&/span& // MAINWINDOW_H&/span&
&/code&&ul style=&& class=&pre-numbering&&&li&1&/li&&li&2&/li&&li&3&/li&&li&4&/li&&li&5&/li&&li&6&/li&&li&7&/li&&li&8&/li&&li&9&/li&&li&10&/li&&li&11&/li&&li&12&/li&&li&13&/li&&li&14&/li&&li&15&/li&&li&16&/li&&li&17&/li&&li&18&/li&&li&19&/li&&li&20&/li&&li&21&/li&&li&22&/li&&li&23&/li&&li&24&/li&&li&25&/li&&li&26&/li&&li&27&/li&&li&28&/li&&li&29&/li&&li&30&/li&&li&31&/li&&li&32&/li&&li&33&/li&&li&34&/li&&li&35&/li&&li&36&/li&&li&37&/li&&li&38&/li&&li&39&/li&&li&40&/li&&li&41&/li&&li&42&/li&&/ul&&code class=&hljs vala has-numbering&&&span class=&hljs-preprocessor&&#include &mainwindow.h&&/span&
&span class=&hljs-preprocessor&&#include &ui_mainwindow.h&&/span&
&span class=&hljs-preprocessor&&#include &QIcon&&/span&
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(&span class=&hljs-keyword&&new&/span& Ui::MainWindow)
ui-&setupUi(&span class=&hljs-keyword&&this&/span&);
MainWindow::~MainWindow()
&span class=&hljs-keyword&&void&/span& MainWindow::on_pushButton_clicked()
&span class=&hljs-comment&&//隐藏主窗口&/span&
&span class=&hljs-keyword&&this&/span&-&hide();
&span class=&hljs-comment&&//新建QSystemTrayIcon对象&/span&
mSysTrayIcon = &span class=&hljs-keyword&&new&/span& QSystemTrayIcon(&span class=&hljs-keyword&&this&/span&);
&span class=&hljs-comment&&//新建托盘要显示的icon&/span&
QIcon icon = QIcon(&span class=&hljs-string&&&../IMClient/Resources/GG64.png&&/span&);
&span class=&hljs-comment&&//将icon设到QSystemTrayIcon对象中&/span&
mSysTrayIcon-&setIcon(icon);
&span class=&hljs-comment&&//当鼠标移动到托盘上的图标时,会显示此处设置的内容&/span&
mSysTrayIcon-&setToolTip(QObject::trUtf8(&span class=&hljs-string&&&测试系统托盘图标&&/span&));
&span class=&hljs-comment&&//给QSystemTrayIcon添加槽函数&/span&
connect(mSysTrayIcon,SIGNAL(activated(QSystemTrayIcon::ActivationReason)),&span class=&hljs-keyword&&this&/span&,SLOT(on_activatedSysTrayIcon(QSystemTrayIcon::ActivationReason)));
&span class=&hljs-comment&&//建立托盘操作的菜单&/span&
createActions();
createMenu();
&span class=&hljs-comment&&//在系统托盘显示此对象&/span&
mSysTrayIcon-&show();
&span class=&hljs-keyword&&void&/span& MainWindow::on_activatedSysTrayIcon(QSystemTrayIcon::ActivationReason reason)
&span class=&hljs-keyword&&switch&/span&(reason){
&span class=&hljs-keyword&&case&/span& QSystemTrayIcon::Trigger:
mSysTrayIcon-&showMessage(QObject::trUtf8(&span class=&hljs-string&&&Message Title&&/span&),
QObject::trUtf8(&span class=&hljs-string&&&欢迎使用此程序&&/span&),
QSystemTrayIcon::Information,
&span class=&hljs-number&&1000&/span&);
&span class=&hljs-keyword&&break&/span&;
&span class=&hljs-keyword&&case&/span& QSystemTrayIcon::DoubleClick:
&span class=&hljs-keyword&&this&/span&-&show();
&span class=&hljs-keyword&&break&/span&;
&span class=&hljs-keyword&&default&/span&:
&span class=&hljs-keyword&&break&/span&;
&span class=&hljs-keyword&&void&/span& MainWindow::createActions()
mShowMainAction = &span class=&hljs-keyword&&new&/span& QAction(QObject::trUtf8(&span class=&hljs-string&&&显示主界面&&/span&),&span class=&hljs-keyword&&this&/span&);
connect(mShowMainAction,SIGNAL(triggered()),&span class=&hljs-keyword&&this&/span&,SLOT(on_showMainAction()));
mExitAppAction = &span class=&hljs-keyword&&new&/span& QAction(QObject::trUtf8(&span class=&hljs-string&&&退出&&/span&),&span class=&hljs-keyword&&this&/span&);
connect(mExitAppAction,SIGNAL(triggered()),&span class=&hljs-keyword&&this&/span&,SLOT(on_exitAppAction()));
&span class=&hljs-keyword&&void&/span& MainWindow::createMenu()
mMenu = &span class=&hljs-keyword&&new&/span& QMenu(&span class=&hljs-keyword&&this&/span&);
mMenu-&addAction(mShowMainAction);
mMenu-&addSeparator();
mMenu-&addAction(mExitAppAction);
mSysTrayIcon-&setContextMenu(mMenu);
&span class=&hljs-keyword&&void&/span& MainWindow::on_showMainAction()
&span class=&hljs-keyword&&this&/span&-&show();
&span class=&hljs-keyword&&void&/span& MainWindow::on_exitAppAction()
exit(&span class=&hljs-number&&0&/span&);
FROM:& http://blog.csdn.net/zhuyunfei/article/details/
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1241629次
积分:13364
积分:13364
排名:第733名
原创:13篇
转载:1611篇
评论:161条
(1)(5)(5)(102)(43)(1)(1)(52)(73)(113)(42)(137)(118)(174)(175)(61)(120)(54)(28)(40)(8)(1)(18)(12)(15)(11)(3)(6)(29)(6)(1)(1)(1)(2)(1)(14)(16)(14)(1)(8)(15)(26)(22)(19)(14)(38)(7)(1)(2)你的位置:///BlueStacks最小化托盘图标怎么打开程序界面
BlueStacks最小化托盘图标怎么打开程序界面
扫描二维码随身看资讯
1. 在手机上细细品读~
2. 分享给您的微信好友或朋友圈~
很多使用安卓模拟器BlueStacks的朋友们发现每次启动程序后会自动最小化到右下角托盘,而且怎么打开都不知道,有问题的朋友们可以来学学下面的方法。
很多使用安卓模拟器BlueStacks的朋友们发现每次启动程序后会自动最小化到右下角托盘,而且怎么打开都不知道,有问题的朋友们可以来学学下面的方法。
BlueStacks最小化托盘图标怎么打开程序界面
其实我们用鼠标左键或右键单击托盘图标,在弹出的菜单中点击&重新开始/重新激活&就可以再次打开BlueStacks了。
等待重启:
重启成功:
转载请注明出处:第九软件网
标签聚合:
相关教程资讯
相关专题推荐
客官,请随便说两句
本栏浏览排行榜
装机热门软件推荐最小化时出现托盘图标,双击恢复窗口后,托盘图标消失。
2&&&&&&&&&&
1&&&&&&&&&&
0&&&&&&&&&&
3&&&&&&&&&&
4&&&&&&&&&&
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。2009年10月 Java大版内专家分月排行榜第一
2009年11月 Java大版内专家分月排行榜第二
本帖子已过去太久远了,不再提供回复功能。

我要回帖

更多关于 wpf程序最小化到托盘 的文章

 

随机推荐