电子时钟的设计分为三部分,时间显示功能,闹钟设置功能,闹钟功能。当闹钟设置后,会进行隐藏,但时间到了闹钟没有升起。求大佬解决!!!
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();
}
}
闹钟设置完成,会隐藏起来
当系统时间到了,无法升起显示,没有任何反应。