QT如何实现后台运行(即最小化到右下角托盘)
QT如何实现后台运行(即最小化到右下角托盘)
第一期:
用hello world简单的代码更容易看懂托盘的具体实现,一些细节问题,比如为什么提示消息没有显示在托盘上,如何在tip消息上增加图标等。
#include <QtGui>
class myclass: public QWidget
{
public:
myclass();
private:
QPushButton *b1;
QSystemTrayIcon *trayIcon;
};
myclass::myclass()
{
QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312"));
setMinimumSize(200,100);
setMaximumSize(200,100);
b1=new QPushButton("hello world",this);
b1->setGeometry(20,20,160,40);
QIcon icon = QIcon("./images/bad.svg");
setWindowIcon(icon);
trayIcon = new QSystemTrayIcon(this);
trayIcon->setIcon(icon);
trayIcon->setToolTip("a trayicon example");
QString titlec=tr("Hello");
QString textc=QString::fromLocal8Bit("Hello QT?");
trayIcon->show();
trayIcon->showMessage(titlec,textc,QSystemTrayIcon::Information,5000);
setWindowTitle(tr("Systray"));
}
int main(int argc,char **argv)
{
QApplication testc(argc,argv);
myclass newc;
newc.show();
return testc.exec();
}
第二期:
进一步研究,加入点击托盘的响应,使提示信息显示在托盘上,托盘的右键菜单。
经验一:编译信号和槽 需要有.h .cpp这样的格式,否则不会生成相应的信号和槽;
经验二:信号和槽之间可以递参数,但是不允许函数直接给槽提供参数。
hello.h
#include <QtGui>
class myclass: public QWidget
{
Q_OBJECT
public:
myclass();
private:
QPushButton *b1;
QSystemTrayIcon *trayIcon;
char *msg;
void showMessage(char *msg);
private slots:
void showM();
void iconActivated(QSystemTrayIcon::ActivationReason reason);
};
hello.cpp
#include <QtGui>
#include "hello.h"
myclass::myclass()
{
QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312"));
setMinimumSize(200,100);
setMaximumSize(200,100);
b1=new QPushButton("hello world",this);
b1->setGeometry(20,20,160,40);
QIcon icon = QIcon("./images/bad.svg");
setWindowIcon(icon);
trayIcon = new QSystemTrayIcon(this);
trayIcon->setIcon(icon);
trayIcon->setToolTip("a trayicon example");
trayIcon->show();
setWindowTitle(tr("Systray"));
connect(trayIcon,SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
this,SLOT(iconActivated(QSystemTrayIcon::ActivationReason)));
connect(b1,SIGNAL(clicked()),this,SLOT(showM()));
}
void myclass::showM()
{
QString titlec=tr("slot需要signal相同的参数进行传递");
QString textc=QString::fromLocal8Bit("测试内容单击、双击、中键、按钮");
trayIcon->showMessage(titlec,textc,QSystemTrayIcon::Information,5000);
}
void myclass::showMessage(char *msg)
{
QString titlec=tr(msg);
QString textc=QString::fromLocal8Bit("测试内容单击、双击、中键、按钮");
trayIcon->showMessage(titlec,textc,QSystemTrayIcon::Information,5000);
}
void myclass::iconActivated(QSystemTrayIcon::ActivationReason reason)
{
switch (reason) {
case QSystemTrayIcon::Trigger:
showMessage("单击");
break;
case QSystemTrayIcon::DoubleClick:
showMessage("双击啦");
break;
case QSystemTrayIcon::MiddleClick:
showMessage("你用的是三轮鼠标还是滚轮鼠标啊");
break;
default:
;
}
}
int main(int argc,char **argv)
{
QApplication testc(argc,argv);
myclass newc;
newc.show();
return testc.exec();
}
第三期:
那么最后我们把所有元素都结合在一起来实现这么一个托盘程序,比较上个例子我们增加了右键菜单并使它管理窗口的大小。
hello.h
#include <QtGui>
class myclass: public QWidget
{
Q_OBJECT
public:
myclass();
private:
QPushButton *b1;
QSystemTrayIcon *trayIcon;
char *msg;
void showMessage(char *msg);
void createActions();
void createTrayIcon();
QAction *minimizeAction;
QAction *maximizeAction;
QAction *restoreAction;
QAction *quitAction;
QMenu *trayIconMenu;
private slots:
void showM();
void iconActivated(QSystemTrayIcon::ActivationReason reason);
};
hello.cpp
#include <QtGui>
#include "hello.h"
myclass::myclass()
{
QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312"));
setMinimumSize(200,100);
b1=new QPushButton("hello world",this);
b1->setGeometry(20,20,160,40);
QIcon icon = QIcon("./images/bad.svg");
setWindowIcon(icon);
trayIcon = new QSystemTrayIcon(this);
trayIcon->setIcon(icon);
trayIcon->setToolTip("a trayicon example");
createActions();
createTrayIcon();
trayIcon->show();
setWindowTitle(tr("Systray"));
connect(trayIcon,SIGNAL(activated(QSystemTrayIcon::ActivationReason)),this,SLOT(iconActivated(QSystemTrayIcon::ActivationReason)));
connect(b1,SIGNAL(clicked()),this,SLOT(showM()));
}
void myclass::showM()
{
QString titlec=tr("slot需要signal相同的参数进行传递");
QString textc=QString::fromLocal8Bit("测试内容单击、双击、中键、按钮");
trayIcon->showMessage(titlec,textc,QSystemTrayIcon::Information,5000);
}
void myclass::showMessage(char *msg)
{
QString titlec=tr(msg);
QString textc=QString::fromLocal8Bit("测试内容单击、双击、中键、按钮");
trayIcon->showMessage(titlec,textc,QSystemTrayIcon::Information,5000);
}
void myclass::iconActivated(QSystemTrayIcon::ActivationReason reason)
{
switch (reason) {
case QSystemTrayIcon::Trigger:
showMessage("单击");
break;
case QSystemTrayIcon::DoubleClick:
showMessage("双击啦");
break;
case QSystemTrayIcon::MiddleClick:
showMessage("你用的是三轮鼠标还是滚轮鼠标啊");
break;
default:
;
}
}
void myclass::createActions()
{
minimizeAction = new QAction(tr("最小化 (&I)"), this);
connect(minimizeAction, SIGNAL(triggered()), this, SLOT(hide()));
maximizeAction = new QAction(tr("最大化 (&X)"), this);
connect(maximizeAction, SIGNAL(triggered()), this, SLOT(showMaximized()));
restoreAction = new QAction(tr("还原 (&R)"), this);
connect(restoreAction, SIGNAL(triggered()), this, SLOT(showNormal()));
quitAction = new QAction(tr("退出 (&Q)"), this);
connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit()));
}
void myclass::createTrayIcon()
{
trayIconMenu = new QMenu(this);
trayIconMenu->addAction(minimizeAction);
trayIconMenu->addAction(maximizeAction);
trayIconMenu->addAction(restoreAction);
trayIconMenu->addSeparator();
trayIconMenu->addAction(quitAction);
trayIcon->setContextMenu(trayIconMenu);
}
int main(int argc,char **argv)
{
QApplication testc(argc,argv);
myclass newc;
newc.show();
return testc.exec();
}
转载自:http://www.ithao123.cn/content-1678484.html
QT如何实现后台运行(即最小化到右下角托盘)相关推荐
- SysTrayIcon 改的 python tkinter 最小化至系统托盘
网上的SysTrayIcon改的,Tk页面最小化至托盘,托盘图标左键单击恢复Tk界面 1.点击最小化隐藏至托盘 2.托盘图标右键菜单展示,左键返回Tk界面. 托盘图标可以自定义,修改了SysTrayI ...
- MFC最小化到系统托盘
在VC++中,想实现将MFC最小化到系统托盘,需要调用NOTIFYICONDATA类,并注册相应的消息,以下详细讲解如何实现: 第一步,声明一个NOTIFYICONDATA类,也就是NOTIFYICO ...
- 将 VMware 最小化到系统托盘
1, 下载 Trayconizer 官网地址: http://www.whitsoftdev.com/trayconizer/ 下载地址: http://www.whitsoftdev.com/fil ...
- Delphi 7下最小化到系统托盘
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 在Del ...
- C#实现winform软件开机自动启动并最小化到系统托盘
一.开机自动启动: 拖一个CheckBox 1.软件启动时给CheckBox重置状态: RegistryKey R_local = Registry.LocalMachine; ...
- AllTray-将办法最小化到琐细托盘
Toy Posted in Apps AllTray 是一个很有效的小办法,操纵它你可以将办法的窗口最小化到琐细托盘,从而腾出桌面空间以作它用.此办法主要为那些没有原生供给最小化到琐细托盘成效的办法而 ...
- 爱奇艺如何设置最小化显示在托盘
相信很多朋友都有在使用爱奇艺,那么大家对食物爱奇艺的过程当中如何设置最小化显示在托盘呢?关于这个问题小编就和大家分享一下我的经验,希望能够帮助到大家. 爱奇艺会员活动2020_爱奇艺如何设置最小化显示 ...
- MFC中将窗口最小化到系统托盘和还原
通过以下步骤可以在MFC程序中将窗口最小化到系统托盘,和还原成窗口,附加代码中如有特殊说明则会用红色标出. 1.添加一个ICON图标,其ID为IDI_ICON_TESTICON,在VS2008坐标的R ...
- [Qt] 单击任务栏图标实现最小化
Qt中对于窗口边框的设置一般用到setWindowFlags函数. void setWindowFlags(Qt::WindowFlags type) 如果只setWindowFlags(Qt::Fr ...
最新文章
- 微信小程序发送模板消息,php发送模板消息
- Swarm 如何存储数据?- 每天5分钟玩转 Docker 容器技术(103)
- Tornado做鉴权服务性能实践
- 作为程序员我给csdn博客添加打赏功能
- lambda表达式创建一条最简单的线程
- 阿里CTO:阿里所有技术和产品输出都将必须通过阿里云进行
- centos7黑客帝国装逼
- ubuntu16.04安装配置mysql数据库,分割视频为帧图像
- 【2015-18年腾讯招聘】腾讯产品策划类笔试面试题整理
- 网络编程在线英英词典之查询模块(五)
- 3D视觉学习路线 + 路线规划
- 选对了裤长,胜过任何一件高级定制
- linux图片裁剪软件安卓版,照片裁剪软件下载-照片裁剪 安卓版v2.2-PC6安卓网
- 西门子安装未找到ssf文件_西门子300软件安装出错处理方法
- Latex制作三线表 Latex制作复杂表格 加彩色边框高亮显示
- python做excel表格代码_Python读写Excel表格
- windows 10 时间同步,时间显示不准自动校准。
- (一)、写一个怪物的类,类中有属性姓名(name),攻击力(attack),有打人的方法(fight)。(方法的重写)...
- 解决 Adobe Acrobat Pro DC更新后提示登录激活问题
- 团队内的沟通方式:网络 OR 当面