作了一个 桌面提醒小工具 实现功能:
1.后台托盘运行 双击打开程序
2.输入每日计划,窗口消失时候立即保存
3.可以独立运行
1.后台托盘代码
#include <QtGui/QApplication>
#include "mainwindow.h"
#include <QTextCodec>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312"));//解决保存中文乱码问题
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB2312"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312"));
SystemTrayIcon w;
w.show();
return a.exec();
}
系统托盘的实现以及主功能
#include "mainwindow.h"
#include <QSystemTrayIcon>
#include "fileutil.h"
SystemTrayIcon::SystemTrayIcon(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::SystemTrayIcon)
{
ui->setupUi(this);
ui->textEdit->setText(Fileutil::read());
CreatTrayIcon();
}
SystemTrayIcon::~SystemTrayIcon()
{
delete ui;
}
void SystemTrayIcon::CreatTrayMenu()
{
miniSizeAction = new QAction("Mini(&N)",this);
maxSizeAction = new QAction("Max(&X)",this);
restoreWinAction = new QAction("Restore(&R)",this);
quitAction = new QAction("Exit(&Q)",this);
this->connect(miniSizeAction,SIGNAL(triggered()),this,SLOT(hide()));
this->connect(maxSizeAction,SIGNAL(triggered()),this,SLOT(showMaximized()));
this->connect(restoreWinAction,SIGNAL(triggered()),this,SLOT(showNormal()));
this->connect(quitAction,SIGNAL(triggered()),qApp,SLOT(quit()));
myMenu = new QMenu((QWidget*)QApplication::desktop());
myMenu->addAction(miniSizeAction);
myMenu->addAction(maxSizeAction);
myMenu->addAction(restoreWinAction);
myMenu->addSeparator();
myMenu->addAction(quitAction);
}
void SystemTrayIcon::CreatTrayIcon()
{
CreatTrayMenu();
if (!QSystemTrayIcon::isSystemTrayAvailable()) //判断系统是否支持系统托盘图标
{
return;
}
myTrayIcon = new QSystemTrayIcon(this);
myTrayIcon->setIcon(QIcon("icon.png")); //设置图标图片
setWindowIcon(QIcon("icon.png")); //把图片设置到窗口上
myTrayIcon->setToolTip("SystemTrayIcon V1.0"); //托盘时,鼠标放上去的提示信息
myTrayIcon->showMessage("SystemTrayIcon","Hi,This is my trayIcon",QSystemTrayIcon::Information,10000);
myTrayIcon->setContextMenu(myMenu); //设置托盘上下文菜单
myTrayIcon->show();
this->connect(myTrayIcon,SIGNAL(activated(QSystemTrayIcon::ActivationReason)),this,SLOT(iconActivated(QSystemTrayIcon::ActivationReason)));
}
void SystemTrayIcon::iconActivated(QSystemTrayIcon::ActivationReason reason)
{
switch(reason)
{
case QSystemTrayIcon::Trigger:
break;//如果不添加break 发现单击也可以触发下面的事件
case QSystemTrayIcon::DoubleClick:
if(isVisible()){
hideAndSave();
}else
{
showNormal();
}
break;
case QSystemTrayIcon::MiddleClick:
myTrayIcon->showMessage("SystemTrayIcon","Hi,This is my trayIcon",QSystemTrayIcon::Information,10000);
break;
default:
break;
}
}
void SystemTrayIcon::hideAndSave()
{
hide();
// qDebug()<<ui->textEdit->document()->toHtml("UTF-8");
//qDebug()<<ui->textEdit->document()->toPlainText();
Fileutil::save(ui->textEdit->document()->toHtml("UTF-8"));
}
void SystemTrayIcon::closeEvent(QCloseEvent *event)
{
if (myTrayIcon->isVisible())
{
myTrayIcon->showMessage("SystemTrayIcon","Hi,This is my trayIcon",QSystemTrayIcon::Information,5000);
hideAndSave(); //最小化
event->ignore();
}
else
event->accept();
}
文件处理逻辑
#include "fileutil.h"
#include <QFile>
#include <QTextStream>
#include <QDebug>
/**
文件操作类 保存 读取文件 这里保存为xml
**/
Fileutil::Fileutil()
{
}
void Fileutil::save(QString text){
QFile file("data.xml");
if (!file.open(QIODevice::WriteOnly)) {
return;
}
QTextStream out(&file);
// qDebug()<< text;
out << text;
}
QString Fileutil::read(){
QFile file("data.xml");
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return "";
QString str;
while(!file.atEnd()) {
QByteArray line = file.readLine();
str += line;
}
// qDebug()<< str;
return str;
}
所有代码
http://dl.vmall.com/c0lt0bpaea