#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "myhelper.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
setWindowTitle("计算器");
setWindowIcon(QIcon(":/images/calculator-icon.png"));
// 计算器类初始化
CALC = new Calculator;
ifEqual = false;
// 音乐播放器初始化
InitMusicPlayer(); // 初始化函数,添加音乐文件
player->play();
player->setVolume(20); // 设置音量
ui->sliderVolumn->setValue(20); // 设置音量滑条
playerState = true; // 状态为播放
connect(playlist,SIGNAL(currentIndexChanged(int)),
this, SLOT(onPlaylistChanged(int)));
connect(player,SIGNAL(positionChanged(qint64)),
this, SLOT(onPositionChanged(qint64)));
connect(player,SIGNAL(durationChanged(qint64)),
this, SLOT(onDurationChanged(qint64)));
// 跑马灯效果初始化
iSize = aMusicName.size();
curIndex = 0;
mtimer = new QTimer(this);
connect(mtimer, SIGNAL(timeout()), this, SLOT(scrollCaption()));
mtimer->start(1000);
// 计算器风格,默认为白色靓丽
on_actBGIWhite_triggered();
}
MainWindow::~MainWindow()
{
delete ui;
delete CALC;
}
void MainWindow::keyPressEvent(QKeyEvent *k)
{
// 键盘事件
switch(k->key())
{
case Qt::Key_0:on_btn_0_clicked();break;
case Qt::Key_1:on_btn_1_clicked();break;
case Qt::Key_2:on_btn_2_clicked();break;
case Qt::Key_3:on_btn_3_clicked();break;
case Qt::Key_4:on_btn_4_clicked();break;
case Qt::Key_5:on_btn_5_clicked();break;
case Qt::Key_6:on_btn_6_clicked();break;
case Qt::Key_7:on_btn_7_clicked();break;
case Qt::Key_8:on_btn_8_clicked();break;
case Qt::Key_9:on_btn_9_clicked();break;
case Qt::Key_Plus:on_btnPlus_clicked();break; // +
case Qt::Key_Minus:on_btnMinus_clicked();break; // -
case Qt::Key_Asterisk:on_btnMulti_clicked();break; // *
case Qt::Key_Slash:on_btnDiv_clicked();break; // /
case Qt::Key_Backspace:on_btnBack_clicked();break; // ←
case Qt::Key_Enter:on_btnEqual_clicked();break; // =
case Qt::Key_Return:on_btnEqual_clicked();break; // =
case Qt::Key_Equal:on_btnEqual_clicked();break; // =
case Qt::Key_Period:on_btnPoint_clicked();break; // .
case Qt::Key_ParenLeft:on_btnLeftPare_clicked();break; // (
case Qt::Key_ParenRight:on_btnRightPare_clicked();break; // )
case Qt::Key_Percent:on_btn_mod_clicked();break; // %
case Qt::Key_AsciiCircum:on_btn_pow_clicked();break; // ^
}
}
void MainWindow::InitMusicPlayer()
{
// 添加音乐文件
player = new QMediaPlayer(this);
playlist = new QMediaPlaylist(this);
musicList = (QStringList()
<< "qrc:/music/My Soul (Bonus Track).mp3"
<< "qrc:/music/陈焕明 - 天空之城.mp3"
<< "qrc:/music/玖月花儿与筝 - 琵琶语 (古筝版).mp3"
);
for (int i = 0; i < musicList.count(); i++)
{
QString aMusic = musicList.at(i);
playlist->addMedia(QUrl(aMusic));
}
playlist->setPlaybackMode(QMediaPlaylist::Loop); //循环模式
player->setPlaylist(playlist);
aMusicName = musicList.at(0);
aMusicName = aMusicName.section("/", 2, 2);
ui->LabCurMedia->setText(aMusicName); // 当前音乐名添加到Label标签
}
void MainWindow::onPlaylistChanged(int position)
{
aMusicName = musicList.at(position);
aMusicName = aMusicName.section("/", 2, 2);
ui->LabCurMedia->setText(aMusicName); // 当前音乐名添加到Label标签
iSize = aMusicName.size(); // 跑马灯重置
curIndex = 0;
}
void MainWindow::onDurationChanged(qint64 duration)
{
int secs = duration/1000; //秒
int mins = secs/60; //分钟
secs = secs % 60; //余数秒
durationTime = QString::asprintf("%d:%d", mins, secs);
ui->LabRatio->setText(positionTime + "/" + durationTime);
}
void MainWindow::onPositionChanged(qint64 position)
{
int secs = position/1000; //秒
int mins = secs/60; //分钟
secs = secs % 60; //余数秒
positionTime = QString::asprintf("%d:%d", mins, secs);
ui->LabRatio->setText(positionTime + "/" + durationTime);
}
void MainWindow::scrollCaption()
{
if (curIndex > iSize)
curIndex = 0;
ui->LabCurMedia->setText(aMusicName.mid(curIndex++)); // .mid(pos); 从pos开始截取字符串
}
void MainWindow::on_btnEqual_clicked()
{
ifEqual = true; // 实现连续计算功能
QString input = ui->lineEdInput->text();
input = input.trimmed(); // 去掉字符串首尾的空格
input += "#";
QString errorInfo = ""; // 错误信息
double result;
if (CALC->Run(input, result, errorInfo)){
ui->lineEdResult->setText(QString::number(result));
}
else{
QMessageBox::warning(this, "警告", errorInfo);
on_btnClear_clicked();
}
}
void MainWindow::on_btnClear_clicked()
{
ui->lineEdInput->clear();
ui->lineEdResult->clear();
CALC->Clear();
}
void MainWindow::on_btnCE_clicked()
{
ui->lineEdInput->clear();
}
void MainWindow::on_btn_1_clicked()
{
if (ifEqual){
on_btnClear_clicked();
ifEqual = false;
}
QString input = ui->lineEdInput->text();
input += "1";
ui->lineEdInput->setText(input);
}
void MainWindow::on_btn_2_clicked()
{
if (ifEqual){
on_btnClear_clicked();
ifEqual = false;
}
QString input = ui->lineEdInput->text();
input += "2";
ui->lineEdInput->setText(input);
}
void MainWindow::on_btn_3_clicked()
{
if (ifEqual){
on_btnClear_clicked();
ifEqual = false;
}
QString input = ui->lineEdInput->text();
input += "3";
ui->lineEdInput->setText(input);
}
void MainWindow::on_btn_4_clicked()
{
if (ifEqual){
on_btnClear_clicked();
ifEqual = false;
}
QString input = ui->lineEdInput->text();
input += "4";
ui->lineEdInput->setText(input);
}
void MainWindow::on_btn_5_clicked()
{
if (ifEqual){
on_btnClear_clicked();
ifEqual = false;
}
QString input = ui->lineEdInput->text();
input += "5";
ui->lineEdInput->setText(input);
}
void MainWindow::on_btn_6_clicked()
{
if (ifEqual){
on_btnClear_clicked();
ifEqual = false;
}
QString input = ui->lineEdInput->text();
input += "6";
ui->lineEdInput->setText(input);
}
void MainWindow::on_btn_7_clicked()
{
if (ifEqual){
on_btnClear_clicked();
ifEqual = false;
}
QString input = ui->lineEdInput->text();
input += "7";
ui->lineEdInput->setText(input);
}
void MainWindow::on_btn_8_clicked()
{
if (ifEqual){
on_btnClear_clicked();
ifEqual = false;
}
QString input = ui->lineEdInput->text();
input += "8";
ui->lineEdInput->setText(input);
}
void MainWindow::on_btn_9_clicked()
{
if (ifEqual){
on_btnClear_clicked();
ifEqual = false;
}
QString input = ui->lineEdInput->text();
input += "9";
ui->lineEdInput->setText(input);
}
void MainWindow::on_btn_0_clicked()
{
if (ifEqual){
on_btnClear_clicked();
ifEqual = false;
}
QString input = ui->lineEdInput->text();
input += "0";
ui->lineEdInput->setText(input);
}
void MainWindow::on_btnPoint_clicked()
{
if (ifEqual){
on_btnClear_clicked(

Apple_Coco
- 粉丝: 323
最新资源
- 鼎信诺审计软件常见问题------(1).pdf
- C语言第三章习题带答案(1).pdf
- 阀盖工艺及夹具的设计含全套说明书和CAD图纸样本(1).doc
- 第13章常用办公自动化设备实用技术(1).pptx
- 计算机基础试卷(大学)(1).doc
- 基于FX3U PLC与RTU通信技术的多品牌变频器独立控制系统设计与实现
- C语言课程实训设计报告(农民工资系统)(1).docx
- 鸿业土方计算设计软件(1).pdf
- 单片机课程设计超声波测距仪的设计说明 (1)(1).doc
- 计算机四级信息安全工程师模拟试题(20220103035918)------(1).pdf
- 信息、网络及办公自动化管理制度(1).doc
- C语言期末考试全部知识点复习资料重点常考点(1).docx
- C语言12章课后题(1).doc
- Excel快捷命令大全(1).pdf
- 完整版网上商城项目数据库表(1).doc
- 软件配置管理计划模版 (1)(1).doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈


