qt生成应用程序图标和托盘

首先,准备一个图标,例如:zx.ico,并新建一个文本文档,在里面添加一行:

IDI_ICON1   ICON DISCARDABLE"zx.ico"

重命名为:zx.rc并保存,和你的程序图标zx.ico一起放到QT工程目录下;

然后,在QT工程文件.pro里面最后新添加一行:

RC_FILE = zx.rc

最后,在程序中添加代码:

app.seWindowIcon(QIcon("zx.ico")),保存运行就OK了。

其实,在Qt助手(assistant.exe)搜索关键字"Setting the Application Icon"就可以看到在各种平台设置Qt程序图标的方法,有兴趣的可以去看看,挺简单的。

 connect( quitButton, SIGNAL(clicked()), qApp, SLOT(quit()) );
a.setQuitOnLastWindowClosed(false);//设置托盘缩进后退出可以取消


    QSystemTrayIcon *trayIcon;

    QIcon icon = QIcon(":/tu.png");
    setWindowIcon(icon);
    trayIcon = new QSystemTrayIcon(this);
    trayIcon->setIcon(icon);
    trayIcon->setToolTip("查询系统");
    createActions();//托盘响应事件
    createTrayIcon();//托盘菜单
    trayIcon->show();
    connect(trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(iconActivated(QSystemTrayIcon::ActivationReason)));
  
    if (!QSystemTrayIcon::isSystemTrayAvailable())//判断是否可以用托盘
    {
        QMessageBox::critical(0, QObject::tr("Systray"),
          QObject::tr("I couldn't detect any system tray on this system."));
        return 1;
    }

void MainWindow::iconActivated(QSystemTrayIcon::ActivationReason reason)//鼠标事件判断
{
    //触发后台图标执行相应事件
    switch (reason)
    {
    case QSystemTrayIcon::Trigger:
        //showMessage("鼠标单击!");
        break;
    case QSystemTrayIcon::DoubleClick:
        //showMessage("鼠标双击!");
        showNormal();
        break;
    case QSystemTrayIcon::MiddleClick:
        //showMessage("鼠标中键!");
        break;
    default:
        break;
    }
}
 
void MainWindow::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 MainWindow::createTrayIcon()
{
     //设置右键点击时弹出的菜单
     trayIconMenu = new QMenu(this);
     trayIconMenu->addAction(minimizeAction);
     trayIconMenu->addAction(maximizeAction);
     trayIconMenu->addAction(restoreAction);
     trayIconMenu->addSeparator();
     trayIconMenu->addAction(quitAction);
     trayIcon->setContextMenu(trayIconMenu);
}
 
 
void MainWindow::closeEvent(QCloseEvent *event)//关闭拦截
{


    if(this->isVisible()){
    hide();
    event->ignore();
    }else
        event->accept();
}




void MainWindow::changeEvent(QEvent* event){//最小化拦截
    if(event->type()==QEvent::WindowStateChange){
        if(windowState() & Qt::WindowMinimized){
           QTimer::singleShot(0, this, SLOT(hide()));
           //mSystemTrayIcon->show();
        }
    QMainWindow::changeEvent(event);
}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值