一个基于qt的番茄钟软件的开源

1.为什么想写这个软件

因为之前本人一直在用pyqt开发小的软件,实现python爬虫的视频资源搜索的程序ui。
在其中,发现了很多的样式开发的问题,从qcompleter,qtablewidget的问题,以及软件整体臃肿、遇到问题寻找资料困难的问题。
所以,我转向了基于c++的qt。
因为学了,所以想写一个小程序试试水。
而之前一直在用的一个番茄钟是steam里免费的chill drive,如图。
在这里插入图片描述
这是一个很优秀的番茄钟软件,可以计时,听歌,还有很优秀的背景画面。
但由于本人经常用电脑工作,像这样全屏的应用并不适合。
所以一拍即合,我写了一个桌面挂件式的番茄钟。 并在这里,留下一些足迹。
在这里插入图片描述

2.创作中实现的关键功能以及一些小技巧

整体使用了qt creater完成代码编写。

图标资源获取

我目前用下来最棒的图标网站,全部可使用svg格式,自定义大小。
https://yesicon.app/bi
同时,ico文件可以从svg转换,网址如下。
https://www.aconvert.com/cn/icon/svg-to-ico/

实现无边框

无边框界面是让qt程序变好看的第一步。
这里我参考的是github开源的qt无边框实现
大概分为三步。
第一、改成透明背景,以及无边框

	setAttribute(Qt::WA_TranslucentBackground);
    setWindowFlags(Qt::FramelessWindowHint|this->windowFlags());

第二、改写窗口的四个函数,实现背景的样式以及软件拖动效果。

	void mousePressEvent(QMouseEvent*event) override;
    void mouseMoveEvent(QMouseEvent*event) override;
    void mouseReleaseEvent(QMouseEvent*event) override;
    void paintEvent(QPaintEvent * event) override;

第三、实现新的放大、缩小、关闭的效果。

void closeEvent(QCloseEvent *event) override;

这里我并没有实现拖动大小的功能的方法,并且在本软件中没太大必要,所以暂且搁置。

设置界面ui实现

运用了Qdialog实现。
在这里插入图片描述

背景音乐功能

本人是喜欢在工作时听音乐的,所以用了qt自带的music模块。
点击文件夹图标,即可进入对应的音乐文件夹,往文件夹里自行添加音乐即可。
由于本人不希望这个番茄钟功能冗余,所以并不打算加上音乐播放器的功能。

倒计时功能

这个功能运用了QTimer模块。
这个模块完美的实现了多线程和计时效果,所以这个最关键的功能反而很简单。

敏感步骤的提示

这里采用的QMessageBox
在这里插入图片描述

动画效果的按钮实现

像这种动画效果的按钮,一般是构造成一个类,对QWidget进行提升。
提前准备好三个样式的按钮图标。
分别在触摸,点击,离开三个时间段转换图标并update即可。

class eventColorButton : public QWidget
{
    Q_OBJECT
private:
    QPixmap pic;
    QString leavepic;//这里保存按钮图标的地址
    QString enterpic;
    QString presspic;
    QString releasepic;
public:
    explicit eventColorButton(QWidget *parent = nullptr);
    void mousePressEvent(QMouseEvent *event) override;//实现鼠标后的按钮图标转换
    void mouseReleaseEvent(QMouseEvent *event) override;//鼠标释放的时候,触发clicked信号
    void leaveEvent(QEvent *event) override;//实现鼠标离开时按钮图标转换
    void enterEvent(QEvent *event) override;//实现鼠标进入时按钮图标转换
    void paintEvent(QPaintEvent *event) override;//实现按钮图标初始化
    void initializePixmaps(QString leavePixmapPath, QString enterPixmapPath,QString pressPixmapPath);

signals:
    void clicked();//鼠标点击后的信号
};

3. 软件当前存在的一些已知bug

不同显示器不适配的问题

因为qt的dpi适配问题,目前在不同显示屏上软件显示的效果可能存在不同。
我这里并没有用qt自带的高dpi自适应,因为这会引起放大后图标清晰度降低的问题。
受限于本人能力,以下是我给的解决方法:

 // 获取当前屏幕分辨率
    QSize screenSize = screen->size();
    int screenWidth = screenSize.width();
    int screenHeight = screenSize.height();
    int width,height;
    width=430;
    height=150;
    QString currentDirPath = QCoreApplication::applicationDirPath();
    QFile file(currentDirPath + QDir::separator() + ".txt");
    if (!file.exists()) {
        if (file.open(QIODevice::WriteOnly)) {
            QTextStream out(&file);
            out << "430 150";
            file.close();
        }
    }else{
        if (file.open(QIODevice::ReadOnly)) {
            QTextStream in(&file);
            QString line = in.readLine(); 
            file.close(); 
            QStringList numbers = line.split(' ');
            width = numbers.at(0).toInt();
            height = numbers.at(1).toInt();
        };
    };

    if (screenWidth == 2560) {
        w.resize(width, height);
    }else{
        int dpiw = width*screenWidth/2560;
        int dpih = height*screenWidth/2560;
        w.resize(dpiw,dpih);
    }

软件会获得当前屏幕的分辨率,然后等比例改变整个软件的大小。
当然不排除某些显示屏的大小不匹配,造成一些尺寸问题。

我这里将窗口默认尺寸放在了文件tomatoBellSize.txt中。
这个文件会在打开一次exe文件后的exe文件的同目录下自动生成。
保持格式修改这个文件里的两个数字即可。
在这里插入图片描述

或者使用源码的人也可以自行更改这个默认尺寸430,150到合适的大小。

背景音乐添加问题

背景音乐只给了两种格式权限:mp3和wav。
白噪音只给了一种格式权限:mp3。

如果是其它格式,得自行转换,或者修改源码。

4.源码分享以及打包的app链接

是windows系统的,其它的系统本人没试过。
软件使用了NSIS做成安装包,使用方法可见隔壁的大佬的NSIS安装包教程

源码在GitHub
https://github.com/5Wxx/Qt-Project1

安装包在百度网盘

通过百度网盘分享的文件:TomatoBellSetup.exe
链接:https://pan.baidu.com/s/1QGVPnGhxhM-LqhPJavL6cg?pwd=d11t
提取码:d11t

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值