返回首页

Qt创建托盘图标

时间:2011-05-21 13:23来源:武汉华嵌 作者:武汉华嵌 点击:
Qt创建托盘图标 作者:武汉华嵌嵌入式培训中心 讲师:方世文 在 Qt 中经常用到需要把正在运行的程序最小化到系统托盘中 ,以下是关于怎样实现这一功能的 demo。 代码清单如下: /
  

Qt创建托盘图标

作者:武汉华嵌嵌入式培训中心    助理讲师:方世文

 

    在Qt中经常用到需要把正在运行的程序最小化到系统托盘中 ,以下是关于怎样实现这一功能的demo。

代码清单如下:

/////////////////////////  demo.h文件  ////////////////////

 #include <QtGui>
class Window: public QWidget
{
    Q_OBJECT       
public:
    Window();

private:
    void showMessage(char *msg);
    void createActions();
    void createTrayIcon();


    QSystemTrayIcon *trayIcon;
    QMenu *trayIconMenu;  
    QAction *minimizeAction;
    QAction *maximizeAction;
    QAction *restoreAction;
    QAction *quitAction;

private slots:
    void showMessage();
    void iconActivated(QSystemTrayIcon::ActivationReason reason);
};

//////////////////////////// demo.cpp 文件   //////////////////////

#include "demo.h"
Window::Window()
{       
    QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312"));
    setMinimumSize(200,100)

    //建立系统托盘图标
    QIcon icon = QIcon("./images/tray.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(button, SIGNAL(clicked()), this, SLOT(showMessage()));
}

 

void Window::showMessage()
{
    QString titlec=tr("slot
需要signal相同的参数进行传递");
    QString textc=QString::fromLocal8Bit("
测试内容单击、双击、中键、按钮");
    trayIcon->showMessage(titlec, textc, QSystemTrayIcon::Information, 5000);
}
               
void Window::showMessage(char *msg)
{
    QString titlec=tr(msg);
    QString textc=QString::fromLocal8Bit("
测试内容单击、双击、中键、按钮");
    trayIcon->showMessage(titlec, textc, QSystemTrayIcon::Information, 5000);
}
               
void Window::iconActivated(QSystemTrayIcon::ActivationReason reason)
{
    //
触发后台图标执行相应事件
    switch (reason)
    {
    case QSystemTrayIcon::Trigger:
        showMessage("
鼠标单击!");
        break;
    case QSystemTrayIcon::DoubleClick:
        showMessage("
鼠标双击!");
        break;
    case QSystemTrayIcon::MiddleClick:
        showMessage("
鼠标中键!");
        break;
    default:
        break;
    }
}

void Window::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 Window::createTrayIcon()
{
     //
设置右键点击时弹出的菜单
     trayIconMenu = new QMenu(this);
     trayIconMenu->addAction(minimizeAction);
     trayIconMenu->addAction(maximizeAction);
     trayIconMenu->addAction(restoreAction);
     trayIconMenu->addSeparator();
     trayIconMenu->addAction(quitAction);
     trayIcon->setContextMenu(trayIconMenu);
}

/////////////////////////  main.cpp //////////////////////

#include "demo.h"

int main(int argc,char **argv)
{
    QApplication app(argc,argv);
    if (!QSystemTrayIcon::isSystemTrayAvailable())
    {
        QMessageBox::critical(0, QObject::tr("Systray"),
          QObject::tr("I couldn't detect any system tray on this system."));
        return 1;
    }

    Window window;
    window.show();

return app.exec();
}

就这样,我们实现了关闭窗口后,运行的程序隐藏到了系统托盘中。

(原文出处:武汉华嵌 http://www.embedhq.org/, 转载请注明出处)

------分隔线----------------------------

  • 李老师
  • 李老师
  • 胡老师
  • 胡老师
合作伙伴
  • 武汉工程大学合作培训机构

  • 国家信息技术紧缺人才培养工程(NITE)

  • ARM公司全球授权培训中心

  • 国内首家Symbian授权培训

  • 微软全球嵌入式合作伙伴

  • Altera全球合作培训机构

在线客服
  • 客服热线:
    139-8620-3604
    159-2752-9536



  • 官方微信
  •  咨询微信二维码