基于嵌入式Linux下的Qt下的电子时钟(有问题,求大佬急救)

电子时钟的设计分为三部分,时间显示功能,闹钟设置功能,闹钟功能。当闹钟设置后,会进行隐藏,但时间到了闹钟没有升起。求大佬解决!!!

dialog.h

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include<QSystemTrayIcon>
#include<QAction>
#include<QMenu>
#include<QHBoxLayout>
#include<QApplication>
#include<QDesktopWidget>
#include<QCloseEvent>
#include<QEvent>
#include<QMessageBox>
#include <QLCDNumber>
#include <QTime>
#include<QTimer>
QT_BEGIN_NAMESPACE
namespace Ui { class Dialog; }
QT_END_NAMESPACE
class QTimer;
class QHBoxLayout;
class QVBoxLayout;
class QPushButton;
class QLabel;
class QTimeEdit;
class QLCDNumber;
class QVariant;
class QTime;
class QAction;

class Dialog : public QDialog
{
    Q_OBJECT
signals:
    void isCurrentTime();

public:
    Dialog(QWidget *parent = nullptr);
    ~Dialog();

private slots:
    void clockChange();//更新时间
    void dialogUp();//闹钟到了,提示框显示
    void mini();//最小化到托盘
    void down();//隐藏
    void comToCur();//比较所时间跟标准之间
protected:
    void closeEvent(QCloseEvent * event);

private:
    Ui::Dialog *ui;
    void init();//初始化
    void layout();//布局
    void con();//connect
    //QLCDNumber * LcdNumber;
    QLCDNumber * lcdNumber;//显示当前时间
    QLabel * label;//提示设置下个闹钟
    QTimeEdit * timeEdit;//设置小个闹钟
    QPushButton * button;//确定
    QTimer * timer;
    QTimer * uptimer;
    QTimer * dtimer;
    QTimer * itimer;
    QRect rect;
    int x;
    int y;
    double du;
    QSystemTrayIcon * trayIcon;
    QAction * restoreAct;
    QAction * quitAct;
    QMenu * trayIconMenu;
};
#endif // DIALOG_H

dialog.cpp

#include "dialog.h"
#include "ui_dialog.h"
#include<QtGui>
#include<time.h>
Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::Dialog)
{
    timer=new QTimer;
    timer->setInterval(1000);
    timer->start();
    connect(timer,SIGNAL(timeout()),this,SLOT(clockChange()));
    init();
    layout();
    con();
//    ui->setupUi(this);
}

Dialog::~Dialog()
{
    delete ui;
}

void Dialog::init()
{
    ui->setupUi(this);
    setWindowTitle("Alarm clock"); //设置标题
    setFixedSize(QSize(550,75)); //固定大小
    //dateTime=new QDateTime;
    timer=new QTimer;//控制lcd的时间刷新
    uptimer=new QTimer;//控制对话框上升
    dtimer=new QTimer;//控制对话框下降
    itimer=new QTimer;
    ui->lcdNumber=new QLCDNumber;//显示当前时间
    ui->lcdNumber->setFixedSize(QSize(350,50));//固定大小
    ui->lcdNumber->setDigitCount(20);//显示20个数字,默认是显示5个数字
    ui->lcdNumber->setSegmentStyle(QLCDNumber::Flat); //填充颜色 ,默认是白色的
    //ui->lcdNumber->display(QTime::currentTime().toString("hh:mm:ss"));//设置格式,还有其他形式的
    QDateTime datetime=QDateTime::currentDateTime();
    ui->lcdNumber->display(datetime.toString("yyyy-MM-dd hh:mm:ss"));
    label=new QLabel(QString::fromUtf8("闹钟"));//提示设置下个闹钟
    timeEdit=new QTimeEdit;
    timeEdit->setDisplayFormat("hh:mm:ss");
    button= new QPushButton(QString::fromUtf8("确定"));
    trayIcon=new QSystemTrayIcon;
    //托盘icon
    trayIcon->setIcon(QIcon("://images/图3.png"));
    trayIcon->show();
    //setWindowIcon(QIcon("./images/qme.ico"));
    restoreAct=new QAction(QString::fromUtf8("显示"),this);
    quitAct=new QAction(QString::fromUtf8("退出"),this);
    trayIconMenu=new QMenu;
    trayIconMenu->addAction(restoreAct);
    trayIconMenu->addAction(quitAct);
    trayIcon->setContextMenu(trayIconMenu);
    setWindowFlags(Qt::WindowStaysOnTopHint);
}
//布局
void Dialog::layout()
{
    QHBoxLayout * rightTopLay=new QHBoxLayout;
    rightTopLay->addWidget(label);
    rightTopLay->addWidget(timeEdit);
    QHBoxLayout * rightButtomLay=new QHBoxLayout;//
    rightButtomLay-> addStretch();
    rightButtomLay-> addWidget(button);
    QVBoxLayout * rightLay=new QVBoxLayout;
    rightLay->addLayout(rightTopLay);
    rightLay->addLayout(rightButtomLay);
    rightLay->addStretch();
    QHBoxLayout * main=new QHBoxLayout;
    main->addWidget(ui->lcdNumber);
    main->addLayout(rightLay);
    setLayout(main);
    rect=QApplication::desktop()->rect();
    x=rect.right()-width()-2;
    y=rect.bottom()+30;//
    setGeometry(x,y,width(),height());
}
//connect信号与槽
void Dialog::con()
{
    connect(timer,SIGNAL(timeout()),this,SLOT(clockChange()));
    timer-> start(1000);
    connect(uptimer,SIGNAL(timeout()),this,SLOT(dialogUp()));
    uptimer-> start(20);
    connect(dtimer,SIGNAL(timeout()),this,SLOT(down()));
    dtimer-> start(20);
    connect(button,SIGNAL(clicked()),dtimer,SIGNAL(timeout()));
    connect(button,SIGNAL(clicked()),this,SLOT(mini()));
    connect(itimer,SIGNAL(timeout()),this,SLOT(comToCur()));
    itimer-> start(20);
    connect(restoreAct,SIGNAL(triggered(bool)),uptimer,SIGNAL(timeout()));
    connect(this,SIGNAL(isCurrentTime()),uptimer,SIGNAL(timeout()));
    connect(itimer,SIGNAL(timeout()),this,SLOT(comToCur()));
    itimer-> start(10);
    connect(quitAct,SIGNAL(triggered(bool)),this,SLOT(close()));
}
//显示变化的时间
void Dialog::clockChange()
{
    QDateTime datetime=QDateTime::currentDateTime();
    ui->lcdNumber->display(datetime.toString("yyyy-MM-dd hh:mm:ss"));
     // ui->lcdNumber->display(QTime::currentTime().toString("hh:mm:ss"));
}
//闹钟到了,提示框慢慢升起来
void Dialog::dialogUp()
{
    show();
    uptimer->start(6);
    if(y>=rect.bottom()-height()-50)
    {
        y-=2;
    }
    else
    {
        uptimer->stop();
    }
    setGeometry(x,y,width(),height());
}
//确定后,下降,然后隐藏起来
void Dialog::down()
{
    dtimer->start(6);
    if(y<rect.bottom())
    {
        y+=height()+20;
    }
    else
    {
        dtimer->stop();
    }
    setGeometry(x,y,width(),height());
}
//最小化到托盘
void Dialog::mini()
{
    hide();
}
//close Event
void Dialog::closeEvent(QCloseEvent * event)
{
    QMessageBox::information(0,"Quit","Are you sure exit the Application!");
}
//对比现在时间,与所设置的时间
void Dialog::comToCur()
{
    if(QVariant(QTime::currentTime()).toString()==QVariant(timeEdit->time()).toString())
    {
        QApplication::beep();
        emit isCurrentTime();

    }
}

闹钟设置完成,会隐藏起来

当系统时间到了,无法升起显示,没有任何反应。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值