Qt贴图实现辉光管电子钟

放图镇楼

Qt贴图实现辉光管电子钟_第1张图片
可以看出效果还是有点粗糙的。。尤其是辉光管图片的边缘明显。emmm那缩小了看就好hhhhhh

日前看到某宝上的创意礼物,恰好用QLCDnumber实现了一个电子钟被吐槽说丑,于是心生一计——用贴图实现一个辉光管电子钟!现在想想,大部分时间不是在写代码,而是在做美工,水平有限T T有P图大佬能指点一下怎么把背景和灯管融为一体,最好了。

功能描述

点击exe文件后,出现该时钟,可以长按左键拖动, 可以单击右键关闭;如果你愿意,还可以设置开机启动。

制作流程

建立图库

首先,找到了知乎上某大神关于如何自己制作一个 divergense meter(辉光管时钟)?的高赞回答里找到了一则大神做完的效果视频,我当时就说,就 模仿它了。然后,把视频导入Lr,我也是第一次发现Lr有视频抽帧的功能。

从中选出了同一位灯管连续从0~9的一段,抽帧后截取,然后把这一顿操作应用到其他帧上去做出了0-9的图库。赞美Lr,对图片批量操作不能更好用了。Qt贴图实现辉光管电子钟_第2张图片
然后做背景,要有点气质高贵,要有点复古情怀。于是,我打开了我唯一会的绘图软件——PowerPoint。是的,点击插入—形状,然后填充—渐变,做出一个灰色渐变的背景图。就是下图上面的部分。Qt贴图实现辉光管电子钟_第3张图片
接下来,又去某东上搜了一个辉光管电子钟的正面图,把底座截下来O rz两张图拼在一起做了一个背景。接下来只需要把之前的0~9显示在背景上就好了。

Qt程序

Qt程序的大致思路无非是用了一个QDialog做基类,用图片做背景,QTimer用于产生SIGNAL刷新画面中的数字,用QLabel显示数字图片,用QLCDnumber显示日期,使用mouseEvent控制画面移动。其中把安排控件布局的函数、显示图片的SLOT函数分开,提高代码效率。并且一定要把图片都加入资源文件,虽然后面发布的时候引起了很多错误。。。

主要是用getPng函数加载资源文件中的图片,使用Qlabel显示。下面把显示时间和日期的部分代码贴出来:

void Dialog::showDateTime(){
    QDateTime dateTime = QDateTime::currentDateTime();
    QString text = dateTime.toString("yyyy-MM-dd HH:mm:ss");

    QPixmap pixmap;
    pixmap.load(getPng(text[11]));
    hourH->setPixmap(pixmap);
    pixmap.load(getPng(text[12]));
    hourL->setPixmap(pixmap);
    pixmap.load(getPng(text[14]));
    minH->setPixmap(pixmap);
    pixmap.load(getPng(text[15]));
    minL->setPixmap(pixmap);
    pixmap.load(getPng(text[17]));
    secH->setPixmap(pixmap);
    pixmap.load(getPng(text[18]));
    secL->setPixmap(pixmap);
    show();

    QString date;
    date = text.section(' ', 0, 0);  //第三个参数不是长度而是end position
    LCDdate->display(date);
}

QString Dialog::getPng(QChar x){
    return (QString(":/image/lightBulb")+ x);
}

程序中固定了窗口的大小、不能缩放,取消了rightLayout的边距,让辉光管能正好显示在底座上。完整的代码详见:
https://download.csdn.net/download/qq_41090341/11493934

打包发布

打包发布的流程介绍的帖子很多了,先用release运行,之后使用Qt自带的windeployqt工具和Enigma生成独立的exe文件。着重mark一下,发布过程中遇到的
No rule to make target '../LightBulb/?????--1.jpg', needed by 'release/qrc_resources.cpp'. Stop.
资源文件加载除了问题,根本无法启动编译。

我先后重建了一个工程、重新上传图片等都没用,最后发现把文件夹里的图片名称汉字全改成英语,然后注释掉pro文件中的resources再恢复,就好了。。。

你可能感兴趣的:(Qt)