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如何实现后台运行(即最小化到右下角托盘)相关推荐

  1. SysTrayIcon 改的 python tkinter 最小化至系统托盘

    网上的SysTrayIcon改的,Tk页面最小化至托盘,托盘图标左键单击恢复Tk界面 1.点击最小化隐藏至托盘 2.托盘图标右键菜单展示,左键返回Tk界面. 托盘图标可以自定义,修改了SysTrayI ...

  2. MFC最小化到系统托盘

    在VC++中,想实现将MFC最小化到系统托盘,需要调用NOTIFYICONDATA类,并注册相应的消息,以下详细讲解如何实现: 第一步,声明一个NOTIFYICONDATA类,也就是NOTIFYICO ...

  3. 将 VMware 最小化到系统托盘

    1, 下载 Trayconizer 官网地址: http://www.whitsoftdev.com/trayconizer/ 下载地址: http://www.whitsoftdev.com/fil ...

  4. Delphi 7下最小化到系统托盘

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 在Del ...

  5. C#实现winform软件开机自动启动并最小化到系统托盘

    一.开机自动启动: 拖一个CheckBox 1.软件启动时给CheckBox重置状态: RegistryKey R_local = Registry.LocalMachine;             ...

  6. AllTray-将办法最小化到琐细托盘

    Toy Posted in Apps AllTray 是一个很有效的小办法,操纵它你可以将办法的窗口最小化到琐细托盘,从而腾出桌面空间以作它用.此办法主要为那些没有原生供给最小化到琐细托盘成效的办法而 ...

  7. 爱奇艺如何设置最小化显示在托盘

    相信很多朋友都有在使用爱奇艺,那么大家对食物爱奇艺的过程当中如何设置最小化显示在托盘呢?关于这个问题小编就和大家分享一下我的经验,希望能够帮助到大家. 爱奇艺会员活动2020_爱奇艺如何设置最小化显示 ...

  8. MFC中将窗口最小化到系统托盘和还原

    通过以下步骤可以在MFC程序中将窗口最小化到系统托盘,和还原成窗口,附加代码中如有特殊说明则会用红色标出. 1.添加一个ICON图标,其ID为IDI_ICON_TESTICON,在VS2008坐标的R ...

  9. [Qt] 单击任务栏图标实现最小化

    Qt中对于窗口边框的设置一般用到setWindowFlags函数. void setWindowFlags(Qt::WindowFlags type) 如果只setWindowFlags(Qt::Fr ...

最新文章

  1. 微信小程序发送模板消息,php发送模板消息
  2. Swarm 如何存储数据?- 每天5分钟玩转 Docker 容器技术(103)
  3. Tornado做鉴权服务性能实践
  4. 作为程序员我给csdn博客添加打赏功能
  5. lambda表达式创建一条最简单的线程
  6. 阿里CTO:阿里所有技术和产品输出都将必须通过阿里云进行
  7. centos7黑客帝国装逼
  8. ubuntu16.04安装配置mysql数据库,分割视频为帧图像
  9. 【2015-18年腾讯招聘】腾讯产品策划类笔试面试题整理
  10. 网络编程在线英英词典之查询模块(五)
  11. 3D视觉学习路线 + 路线规划
  12. 选对了裤长,胜过任何一件高级定制
  13. linux图片裁剪软件安卓版,照片裁剪软件下载-照片裁剪 安卓版v2.2-PC6安卓网
  14. 西门子安装未找到ssf文件_西门子300软件安装出错处理方法
  15. Latex制作三线表 Latex制作复杂表格 加彩色边框高亮显示
  16. python做excel表格代码_Python读写Excel表格
  17. windows 10 时间同步,时间显示不准自动校准。
  18. (一)、写一个怪物的类,类中有属性姓名(name),攻击力(attack),有打人的方法(fight)。(方法的重写)...
  19. 解决 Adobe Acrobat Pro DC更新后提示登录激活问题
  20. 团队内的沟通方式:网络 OR 当面

热门文章

  1. IDEA 的 show diagram 画出的类图线条乱了怎么办
  2. 2015.10.26软件更新公告
  3. 什么?创业者别光想着做CEO,他首先应该是一名出色的销售(一)
  4. 绝对硬核!万物有“理”,科学原来如此有趣!
  5. Kafka常见故障分析总结
  6. C# 如何更改程序集名称
  7. 从抢购iPhone 6看苹果的产业与营销
  8. larbin的详细配置
  9. 测试点击屏幕次数的软件_无需越狱,iOS 任意摆放主屏幕软件图标方法
  10. [WikiOI] 2.3.3 素数判定