#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QPainter>
#include <math.h>
#include <QTimerEvent>
#include <QPixmap>
#include <QMediaPlayer>
#include <QDialog>
#include <QFile>
#include <QTextStream>
#include <QFileDialog>
#include <QLineEdit>
#include <QMessageBox>
#include <iostream>
#include <fstream>
#include <ostream>
#include <cstdlib>
using namespace std;
const double PI = 3.141592;
int flag = 1;//标志位
QString time1;
QString strTemp;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
qsrand(time(0));
//创建定时器对象
timer_time = new QTimer(this);
//连接超时信号 和 自定义的槽函数
connect(timer_time,SIGNAL(timeout()),this,SLOT(onShowTime()));
timer_time->start(1000);
QTimer *timer = new QTimer(this);
connect(timer,SIGNAL(timeout()),this,SLOT(timerUpdate()));
timer->start(1000);
QTimer *timer1 = new QTimer(this);
connect(timer1,SIGNAL(timeout()),this,SLOT(playMusic()));
timer1->start(1000);
ShowAlarm();
}
MainWindow::~MainWindow()
{
delete ui;
}
//显示时间
void MainWindow::onShowTime()
{
//1.获取系统当前时间
QString stime = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss ddd");
//2.显示到状态栏
ui->label_time->setText(stime);
}
//显示闹钟
void MainWindow::ShowAlarm()
{
ItemModel = new QStandardItemModel(this);
QStringList strList;
QFile file;
file.setFileName("alarm.txt");
//打开文件
if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
{
qDebug() << "open read file error: " << file.errorString();
return;
}
QTextStream in(&file);
//一行一行读取文件内容
while (!in.atEnd())
{
QString line = in.readLine();
if(line == "\n" || line == NULL)
{
continue;
}
else
{
strList.append(line);
}
}
int nCount = strList.size();
for(int i = 0;i < nCount;i++)
{
QString string = static_cast<QString>(strList.at(i));
QStandardItem *item = new QStandardItem(string);
ItemModel->appendRow(item);
}
ui->listView->setModel(ItemModel);
connect(ui->listView,SIGNAL(clicked(QModelIndex)),this,SLOT(DeleteAlarm(QModelIndex)));
}
void MainWindow::DeleteAlarm(QModelIndex index)
{
strTemp = index.data().toString();
dialog1 = new QDialog(this);
QLabel *label = new QLabel(dialog1);
label->setText("确认删除此闹钟吗?");
label->move(20,30);
QPushButton *yesBtn = new QPushButton("确定",dialog1);
QPushButton *cancelBtn = new QPushButton("取消",dialog1);
yesBtn->move(50,60);
yesBtn->setFixedSize(50,35);
cancelBtn->move(110,60);
cancelBtn->setFixedSize(50,35);
dialog1->setFixedSize(200,140);
dialog1->setWindowTitle("删除闹钟");
connect(yesBtn,SIGNAL(clicked()),this,SLOT(Sure_delete()));
connect(cancelBtn,SIGNAL(clicked()),this,SLOT(Cancel_delete()));
dialog1->exec();
}
//获取旋转角度
QPointF MainWindow::rotateAngle(int angle,int len)
{
int x,y;
x = 150+len*sin(angle*PI/180);
y = 150-len*cos(angle*PI/180);
return QPointF(x,y);
}
//绘制时钟界面
void MainWindow::paintEvent(QPaintEvent *)
{
QTime time = QTime::currentTime();
int timeH = time.hour();
int timeM = time.minute();
int timeS = time.second();
QPainter painter(this);
QPen pen;
//绘制钟面
pen.setWidth(1);
pen.setColor("#333");
painter.setPen(pen);
for(int i = 0;i < 60;i++)
{
painter.drawLine(rotateAngle(6*i,100),rotateAngle(6*i,95));
}
pen.setWidth(5);
painter.setPen(pen);
painter.drawEllipse(QPoint(150,150),100,100);
pen.setWidth(3);
painter.setPen(pen);
for(int i = 0;i < 12;i++)
{
painter.drawLine(rotateAngle(30*i,100),rotateAngle(30*i,90));
}
//绘制秒针
pen.setWidth(8);
pen.setColor(Qt::green);
painter.setPen(pen);
painter.drawLine(QPointF(150, 150), rotateAngle(0.5*(timeH*60+timeM), 40));
//绘制分针
pen.setWidth(6);
pen.setColor(Qt::blue);
painter.setPen(pen);
painter.drawLine(QPointF(150, 150), rotateAngle(6*timeM, 60));
//绘制时针
pen.setWidth(2);
pen.setColor(Qt::red);
painter.setPen(pen);
painter.drawLine(QPointF(150, 150), rotateAngle(6*timeS, 80));
}
//更新时钟界面的时间
void MainWindow::timerUpdate()
{
update();
}
//添加闹钟
void MainWindow::on_btn_showtime_clicked()
{
time1 = ui->timeEdit->text();
//创建文件对象
QFile file("alarm.txt");
//读写打开文件
bool ok = file.open(QIODevice::ReadWrite | QIODevice::Append | QIODevice::Text);
if(!ok)
{
qDebug() << "file open error:" << file.errorString();
return ;
}
//写文件
QTextStream out(&file);
out << time1 << endl;
//关闭文件
file.close();
ShowAlarm();
}
//播放音乐
void MainWindow::playMusic()
{
dialog = new QDialog(this);
dialog->setFixedSize(200,140);
dialog->setWindowTitle("闹钟页面");
QPushButton *stopBtn = new QPushButton("停止闹钟",dialog);
stopBtn->move(70,50);
stopBtn->setFixedSize(60,40);
connect(stopBtn,SIGNAL(clicked()),this,SLOT(stop_play()));
QTime time = QTime::currentTime();
int timeH = time.hour();
int timeM = time.minute();
int timeS = time.second();
//创建文件对象
QFile file;
file.setFileName("alarm.txt");
//只读打开文件
if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
{
qDebug() << "open read file error: " << file.errorString();
return;
}
QTextStream in(&file);
//一行一行读取文件内容
while (!in.atEnd())
{
QString line = in.readLine();
if(line == "\n" || line == NULL)
{
continue;
}
else
{
QStringList list = line.split(":");
QString a = list[0];
QString b = list[1];
if(timeH == a.toInt() && timeM == b.toInt() && timeS == 0 &&flag == 1)
{
flag = 0;
player = new QMediaPlayer;
player->setMedia(QUrl::fromLocalFile("F:/CloudMusic/1.mp3"));
player->setVolume(100);
player->play();
dialog->exec();
}
}
}
}
//停止音乐
void MainWindow::stop_play()
{
player->stop();
flag = 1;
dialog->close();
}
//删除闹钟 ---
void MainWindow::Sure_delete()
{
QFile file("alarm.txt");
file.open(QIODevice::ReadOnly | QIODevice::Text);
QTextStream in(&file);
QString qline;
string line;
ofstream outfile("alarm2.txt",ios::out | ios::trunc);
while(!in.atEnd())
{
qline = in.readLine();
//比较结果不相等才执行outfile
if(qline.compare(strTemp))
{
line = qline.toStdString();
outfile << line << endl;
}
}
outfile.close();
file.close();
ofstream outfile1("alarm.txt",ios::out | ios::trunc);
fstream file1("alarm2.txt");
while(!file1.eof())
{
getline(file1,line);
outfile1 << line << endl;
}
outfile1.close();
file1.close();
system(" del alarm2.txt");
dialog1->close();
ShowAlarm();
}
void MainWindow::Cancel_delete()
{
dialog->close();
}
QT闹钟alarm
需积分: 32 198 浏览量
2018-11-13
10:54:09
上传
评论 3
收藏 8KB ZIP 举报
grefic
- 粉丝: 0
- 资源: 5
最新资源
- Screenshot_20240513_111001.jpg
- 耕地进出平衡总体方案编制 编制耕地进出平衡总体方案,适用于耕地保护督察、耕地卫片执法、耕地流出整改等耕地保护工作方面及技术服务单
- 课程设计报告-图书信息管理系统.zip
- 05-10 周五 推理是什么
- Python用xlrd读取excel文档,数字总是默认成浮点数的问题
- Software-Defined-Radio-using-MATLAB-Simulink-and-the-RTL-SDR 2nd
- 大气红外探测仪AIRS-V5-Tropospheric-CO2-Products.pdf
- 《STM32单片机+BH1750光照强度+DS18B20测温传感器+Water水位传感器模拟湿度+OLED屏幕》源代码
- ECharts 数据可视化 -单仪表盘
- 135131858118956ssm某企业危化品信息管理系统bf339.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈