Qt学习 桌面提醒小APP

来源:互联网 发布:淘宝店多少钱 编辑:程序博客网 时间:2024/05/02 14:06

作了一个 桌面提醒小工具 实现功能:

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