您的位置:首页 > 编程语言 > Qt开发

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

2014-08-13 16:47 197 查看
首先,准备一个图标,例如: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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: