基于Qt5的闹钟实现代码.doc
《基于Qt5的闹钟实现代码.doc》由会员分享,可在线阅读,更多相关《基于Qt5的闹钟实现代码.doc(7页珍藏版)》请在冰豆网上搜索。
本程序基于QWidget实现,可以动态显示钟表,并且可以添加铃声
头文件widget.h代码如下:
#ifndefWIDGET_H
#defineWIDGET_H
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
namespaceUi{
classWidget;
}
classWidget:
publicQWidget
{
Q_OBJECT
public:
explicitWidget(QWidget*parent=0);
~Widget();
signals:
voidisCurrentTime();
private:
Ui:
:
Widget*ui;
voidinit();
voidlayout();
voidcon();
QLCDNumber*lcdNumber;
QLabel*label;
QTimeEdit*timeEdit;
QPushButton*button;
QTimer*timer;
QTimer*uptimer;
QTimer*dtimer;
QTimer*itimer;
QRectrect;
intx;
inty;
doubledu;
QSystemTrayIcon*trayIcon;
QAction*restoreAct;
QAction*quitAct;
QMenu*trayIconMenu;
privateslots:
voidclockChange();
voiddialogUp();
voidmini();
voiddown();
voidcomToCur();
protected:
voidcloseEvent(QCloseEvent*e);
};
#endif//WIDGET_H
源文件widget.cpp代码如下:
#include"widget.h"
#include"ui_widget.h"
#include
#include
#include
Widget:
:
Widget(QWidget*parent):
QWidget(parent),
ui(newUi:
:
Widget)
{
ui->setupUi(this);
init();
layout();
con();
voidWidget:
:
init()
{
setWindowTitle("我的闹钟");
setFixedSize(300,80);
timer=newQTimer;
uptimer=newQTimer;
dtimer=newQTimer;
itimer=newQTimer;
lcdNumber=newQLCDNumber;
lcdNumber->setFixedSize(150,50);
lcdNumber->setDigitCount(12);
lcdNumber->setSegmentStyle(QLCDNumber:
:
Flat);
lcdNumber->display(QTime:
:
currentTime().toString("hh:
mm:
ss:
zzz"));
label=newQLabel("闹钟");
timeEdit=newQTimeEdit;
timeEdit->setDisplayFormat("hh:
mm:
ss");
button=newQPushButton("确定");
trayIcon=newQSystemTrayIcon;
trayIcon->setIcon(QIcon(":
/new/prefix1/clock.ico"));
trayIcon->show();
setWindowIcon(QIcon(":
/new/prefix1/clock.ico"));
restoreAct=newQAction("显示",this);
quitAct=newQAction("退出",this);
trayIconMenu=newQMenu;
trayIconMenu->addAction(restoreAct);
trayIconMenu->addAction(quitAct);
trayIcon->setContextMenu(trayIconMenu);
setWindowFlags(Qt:
:
WindowStaysOnTopHint);
}
voidWidget:
:
layout()
{
QHBoxLayout*rightTopLay=newQHBoxLayout;
rightTopLay->addWidget(label);
rightTopLay->addWidget(timeEdit);
QHBoxLayout*rightButtonLay=newQHBoxLayout;
rightButtonLay->addStretch();
rightButtonLay->addWidget(button);
QVBoxLayout*rightLay=newQVBoxLayout;
rightLay->addLayout(rightTopLay);
rightLay->addLayout(rightButtonLay);
rightLay->addStretch();
QHBoxLayout*m=newQHBoxLayout;
m->addWidget(lcdNumber);
m->addLayout(rightLay);
setLayout(m);
QDesktopWidget*p=newQDesktopWidget;
p=QApplication:
:
desktop();//
rect=p->rect();
x=rect.right()-width()-2;//
y=rect.bottom()+30;//
setGeometry(x,y,width(),height());
}
voidWidget:
:
con()
{
connect(timer,SIGNAL(timeout()),this,SLOT(clockChange()));
timer->start
(1);
connect(uptimer,SIGNAL(timeout()),this,SLOT(dialogUp()));
uptimer->start(20);
connect(dtimer,SIGNAL(timeout()),this,SLOT(down()));
dtimer->start(20);
connect(button,SIGNAL(clicked(bool)),dtimer,SIGNAL(timeout()));
connect(button,SIGNAL(clicked(bool)),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(20);
connect(quitAct,SIGNAL(triggered(bool)),this,SLOT(close()));
}
voidWidget:
:
clockChange()
{
lcdNumber->display(QTime:
:
currentTime().toString("hh:
mm:
ss:
zzz"));
}
voidWidget:
:
dialogUp()
{
show();
uptimer->start(20);
if(y>=rect.bottom()-height()-50)
{
y-=2;
}
else{
uptimer->stop();
}
setGeometry(x,y,width(),height());
}
voidWidget:
:
down()
{
dtimer->start(20);
if(y{
y+=height()+20;
}
else
{
dtimer->stop();
}
setGeometry(x,y,width(),height());
}
voidWidget:
:
mini()
{
hide();
}
voidWidget:
:
closeEvent(QCloseEvent*e)
{
QMessageBox:
:
information(0,"退出","您确定要退出吗?
");
}
voidWidget:
:
comToCur()
{
if(QVariant(QTime:
:
currentTime().toString())==QVariant(timeEdit->time()).toString())
{
QApplication:
:
beep();
emitisCurrentTime();
}
}
Widget: