Qt学习 桌面提醒小APP

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

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


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值