- CloudMusicPlayer.pro文件添加模块
QT += core gui sql multimedia concurrent
#ifndef CLOUDMUSICPLAYER_H
#define CLOUDMUSICPLAYER_H
#include <QWidget>
#include<QMediaPlayer>
#include<QListWidgetItem>
#include<QPaintEvent>
#include<QPainter>
#include<QSystemTrayIcon>
#include<QAction>
#include<QMenu>
#include<QPoint>
#include<QMouseEvent>
#include<QApplication>
#include<QCursor>
#include<QSettings>
#include"loginwidget.h"
#include"userregister.h"
#include<QDialog>
#include<QLayoutItem>
namespace Ui {
class CloudMusicPlayer;
}
class CloudMusicPlayer : public QWidget
{
Q_OBJECT
public:
explicit CloudMusicPlayer(QWidget *parent = 0);
~CloudMusicPlayer();
private:
Ui::CloudMusicPlayer *ui;
void Init();
bool m_IsPlaying = false;
QMediaPlayer *mediaPlayer;
void paintEvent(QPaintEvent *);
QSystemTrayIcon *mySystemTray;
void InitSystemTrayIcon();
QPoint m_lastPos;
void mousePressEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
bool isPressQMusicWidget;
QMenu *menu_changeSkin;
loginWidget *loginwidget;
QDialog *dialog;
userRegister *userRegisterPage;
QString currentuserName;
QUrl url;
QString author;
QString title;
qint64 duration;
QString albumTitle;
int audioBitRate;
private slots:
void doProcess_btn_openfileClick();
void doProcess_btn_preClick();
void doProcess_btn_playClick();
void doProcess_btn_nextClick();
void doProcess_btn_volumeClick();
void doProcess_btn_AboutClick();
void doProcess_btn_About2Click();
void doProcess_btn_MinmumClick();
void doProcess_btn_QuitClick();
void doProcessbtn_User();
void doProcessbtn_SkinClick();
void doProcessbtnbackgroud_to_default();
void doProcessbtnbackgroud_to_custom();
void doProcessdurationChanged(qint64 duration);
void doProcesspositionChanged(qint64 pos);
void doProcessitemDoubleClicked(QListWidgetItem* item);
void doProcessVolumevalueChanged(int num);
void systemTrayIcon_activated(QSystemTrayIcon::ActivationReason reason);
void receive_signal_loginSuccess(QString);
void UpdateDialogWidget();
};
#endif
#include "cloudmusicplayer.h"
#include "ui_cloudmusicplayer.h"
#include<QDebug>
#include<QFileDialog>
#include<QMessageBox>
#include<QStandardPaths>
#include<QtConcurrent>
CloudMusicPlayer::CloudMusicPlayer(QWidget *parent) :
QWidget(parent),
ui(new Ui::CloudMusicPlayer)
{
ui->setupUi(this);
Init();
}
CloudMusicPlayer::~CloudMusicPlayer()
{
delete ui;
}
void CloudMusicPlayer::Init()
{
InitSystemTrayIcon();
setAttribute(Qt::WA_TranslucentBackground, true);
setWindowFlags(Qt::FramelessWindowHint);
mediaPlayer=new QMediaPlayer(this);
ui->volumeSlider->setVisible(false);
connect(ui->btn_openfile,SIGNAL(clicked(bool)),this,SLOT(doProcess_btn_openfileClick()));
connect(ui->btn_pre,SIGNAL(clicked(bool)),this,SLOT(doProcess_btn_preClick()));
connect(ui->btn_play,SIGNAL(clicked(bool)),this,SLOT(doProcess_btn_playClick()));
connect(ui->btn_next,SIGNAL(clicked(bool)),this,SLOT(doProcess_btn_nextClick()));
connect(ui->btn_volume,SIGNAL(clicked(bool)),this,SLOT(doProcess_btn_volumeClick()));
connect(ui->btn_About,SIGNAL(clicked(bool)),this,SLOT(doProcess_btn_AboutClick()));
connect(ui->btn_About2,SIGNAL(clicked(bool)),this,SLOT(doProcess_btn_About2Click()));
connect(ui->btn_Minmum,SIGNAL(clicked(bool)),this,SLOT(doProcess_btn_MinmumClick()));
connect(ui->btn_Quit,SIGNAL(clicked(bool)),this,SLOT(doProcess_btn_QuitClick()));
connect(ui->btn_User,SIGNAL(clicked(bool)),this,SLOT(doProcessbtn_User()));
connect(ui->btn_Skin,SIGNAL(clicked(bool)),this,SLOT(doProcessbtn_SkinClick()));
connect(ui->listWidget,SIGNAL(itemDoubleClicked(QListWidgetItem*)),this,SLOT(doProcessitemDoubleClicked(QListWidgetItem*)));
connect(ui->volumeSlider,SIGNAL(valueChanged(int)),this,SLOT(doProcessVolumevalueChanged(int)));
connect(mediaPlayer,SIGNAL(durationChanged(qint64)),this,SLOT(doProcessdurationChanged(qint64)));
connect(mediaPlayer,SIGNAL(positionChanged(qint64)),this,SLOT(doProcesspositionChanged(qint64)));
connect(ui->playProgressSlider,&QSlider::sliderMoved,mediaPlayer,&QMediaPlayer::setPosition);
loginwidget=new loginWidget();
dialog=new QDialog(this);
connect(loginwidget,SIGNAL(signal_loginSuccess()),dialog,SLOT(close()));
connect(loginwidget,SIGNAL(signal_loginName(QString)),this,SLOT(receive_signal_loginSuccess(QString)));
connect(loginwidget,SIGNAL(signal_register_click()),this,SLOT(UpdateDialogWidget()));
}
void CloudMusicPlayer::doProcess_btn_openfileClick()
{
qDebug()<<"1"<<endl;
QStringList fileNames = QFileDialog::getOpenFileNames(this,"请选择音乐所在目录","C:\\Users\\gys\\Music",tr("Music (*.mp3)"));
qDebug()<<"fileNames"<<fileNames<<endl;
ui->listWidget->addItems(fileNames);
if(fileNames.length()!=0)
{
ui->listWidget->setCurrentRow(0);
QModelIndex test=ui->listWidget->currentIndex();
ui->listWidget->clicked(test);
}
else
{
QMessageBox::warning(this,"warning","----未选中文件----\n请重新添加音乐列表!");
return;
}
if(currentuserName.isEmpty())
{
return;
}
else
{
for(int i=0;i<fileNames.count();i++)
{
url = fileNames.at(i);
QSqlQuery query;
QString insert_sql = "INSERT INTO MusicInfo (userName, url) VALUES (?, ?)";
query.prepare(insert_sql);
query.addBindValue(currentuserName);
query.addBindValue(url);
query.exec();
}
QSqlQuery querys;
QString removeDupl_sql="DELETE FROM MusicInfo WHERE rowid NOT IN ( SELECT rowid FROM MusicInfo GROUP BY ( userName || 'seprator' || url ) );";
querys.exec(removeDupl_sql);
if(querys.exec(removeDupl_sql))
{
qDebug()<<"执行成功!"<<endl;
}
else
{
QMessageBox::warning(this,"warning",querys.lastError().text());
qDebug()<<"cloudmusicplayer---QSqlQuery::lastError()"<<querys.lastError().text()<<endl;
}
}
}
void CloudMusicPlayer::doProcess_btn_preClick()
{
qDebug()<<"2"<<endl;
if(ui->listWidget->count()!=0)
{
int currentNum = ui->listWidget->currentRow();
int rowcount = ui->listWidget->model()->rowCount();
qDebug()<<rowcount<<currentNum<<endl;
if(currentNum==0)
{
ui->listWidget->setCurrentRow(rowcount-1);
}
else
{
ui->listWidget->setCurrentRow(currentNum-1);
}
QModelIndex test=ui->listWidget->currentIndex();
ui->listWidget->clicked(test);
mediaPlayer->setMedia(QUrl::fromLocalFile(ui->listWidget->currentItem()->text()));
mediaPlayer->setVolume(ui->volumeSlider->value());
ui->btn_play->setIcon(QIcon(":/new/prefix1/img/image/play.png"));
mediaPlayer->play();
m_IsPlaying=true;
}
else
{
qDebug()<<"当前列表为空!"<<endl;
QMessageBox::warning(this,"warning","----当前列表为空----\n请先添加音乐列表!");
return;
}
}
void CloudMusicPlayer::doProcess_btn_playClick()
{
qDebug()<<"3"<<endl;
switch (mediaPlayer->state())
{
case QMediaPlayer::StoppedState:
{
if(ui->listWidget->count()!=0)
{
mediaPlayer->setMedia(QUrl::fromLocalFile(ui->listWidget->currentItem()->text()));
mediaPlayer->setVolume(ui->volumeSlider->value());
ui->btn_play->setIcon(QIcon(":/new/prefix1/img/image/play.png"));
mediaPlayer->play();
m_IsPlaying=true;
}
else
{
QMessageBox::warning(this,"warning","----当前列表为空----\n请先添加音乐列表!");
return;
}
break;
}
case QMediaPlayer::PlayingState:
{
ui->btn_play->setIcon(QIcon(":/new/prefix1/img/image/pase.png"));
mediaPlayer->pause();
m_IsPlaying = false;
break;
}
case QMediaPlayer::PausedState:
{
ui->btn_play->setIcon(QIcon(":/new/prefix1/img/image/play.png"));
mediaPlayer->play();
m_IsPlaying=true;
break;
}
}
}
void CloudMusicPlayer::doProcess_btn_nextClick()
{
qDebug()<<"4"<<endl;
if(ui->listWidget->count()!=0)
{
int currentNum = ui->listWidget->currentRow();
int rowcount = ui->listWidget->model()->rowCount();
qDebug()<<rowcount<<currentNum<<endl;
ui->listWidget->setCurrentRow((currentNum+1)%rowcount);
QModelIndex test=ui->listWidget->currentIndex();
ui->listWidget->clicked(test);
mediaPlayer->setMedia(QUrl::fromLocalFile(ui->listWidget->currentItem()->text()));
mediaPlayer->setVolume(ui->volumeSlider->value());
ui->btn_play->setIcon(QIcon(":/new/prefix1/img/image/play.png"));
mediaPlayer->play();
m_IsPlaying=true;
}
else
{
QMessageBox::warning(this,"warning","----当前列表为空----\n请先添加音乐列表!");
return;
}
}
void CloudMusicPlayer::doProcess_btn_volumeClick()
{
qDebug()<<"5"<<endl;
if(ui->volumeSlider->isVisible())
{
ui->volumeSlider->setVisible(false);
}
else
{
ui->volumeSlider->setVisible(true);
}
}
void CloudMusicPlayer::doProcess_btn_AboutClick()
{
QMessageBox::about(this,"AboutApp","Windows下基于Qt的云音乐播放器\n创作者:GYS\n");
}
void CloudMusicPlayer::doProcess_btn_About2Click()
{
QMessageBox::about(this,"AboutApp","Windows下基于Qt的云音乐播放器\n创作者:GYS\n");
}
void CloudMusicPlayer::doProcess_btn_MinmumClick()
{
showMinimized();
}
void CloudMusicPlayer::doProcess_btn_QuitClick()
{
close();
}
void CloudMusicPlayer::doProcessbtn_User()
{
loginwidget->show();
dialog->setWindowTitle("登录");
dialog->setWindowModality(Qt::ApplicationModal);
dialog->setLayout(new QVBoxLayout);
dialog->layout()->addWidget(loginwidget);
dialog->exec();
int x = this->pos().x() + (this->width() - loginwidget->width()) / 2;
int y = this->pos().y() + (this->height() - loginwidget->height()) / 2;
loginwidget->move(x, y);
}
void CloudMusicPlayer::receive_signal_loginSuccess(QString usrName)
{
ui->listWidget->clear();
currentuserName=usrName;
qDebug()<<"登陆成功!加载数据库中歌曲"<<endl;
QSqlQuery sql_query;
QString select_sql = "select url, author, title, duration, albumTitle, audioBitRate from MusicInfo where userName = ?";
sql_query.prepare(select_sql);
sql_query.addBindValue(currentuserName);
if(sql_query.exec())
{
while(sql_query.next())
{
url=QUrl(sql_query.value(0).toString());
author=sql_query.value(1).toString();
title=sql_query.value(2).toString();
duration=sql_query.value(3).toLongLong();
albumTitle=sql_query.value(4).toString();
audioBitRate=sql_query.value(5).toInt();
QListWidgetItem *item=new QListWidgetItem;
item->setText(url.toString());
ui->listWidget->addItem(item);
}
}
ui->listWidget->setCurrentRow(0);
QModelIndex test=ui->listWidget->currentIndex();
ui->listWidget->clicked(test);
}
void CloudMusicPlayer::doProcessitemDoubleClicked(QListWidgetItem *item)
{
mediaPlayer->setMedia(QUrl::fromLocalFile(item->text()));
mediaPlayer->setVolume(ui->volumeSlider->value());
ui->btn_play->setIcon(QIcon(":/new/prefix1/img/image/play.png"));
mediaPlayer->play();
}
void CloudMusicPlayer::doProcessVolumevalueChanged(int num)
{
mediaPlayer->setVolume(num);
}
void CloudMusicPlayer::doProcessdurationChanged(qint64 duration)
{
QString str = QString("%1:%2:%3").arg(duration/1000/60/60,2,10,QLatin1Char('0')).arg(duration/1000/60,2,10,QLatin1Char('0')).arg(duration/1000%60,2,10,QLatin1Char('0'));
ui->total_lbl->setText(str);
ui->playProgressSlider->setRange(0,duration);
}
void CloudMusicPlayer::doProcesspositionChanged(qint64 pos)
{
QString str = QString("%1:%2:%3").arg(pos/1000/60/60,2,10,QLatin1Char('0')).arg(pos/1000/60,2,10,QLatin1Char('0')).arg(pos/1000%60,2,10,QLatin1Char('0'));
ui->cur_lbl->setText(str);
ui->playProgressSlider->setValue(pos);
}
void CloudMusicPlayer::paintEvent(QPaintEvent *)
{
QString fileName=":/new/prefix1/img/background/default.jpg";
QSettings mysettings("./CloudMusic.ini", QSettings::IniFormat);
mysettings.setIniCodec("UTF8");
QString str = mysettings.value("background/image-url", fileName).toString();
QFuture<QPixmap> future = QtConcurrent::run([&]() {
return QPixmap(str);
});
QPixmap pixmap = future.result();
QPainter painter(this);
painter.drawPixmap(this->rect(), pixmap);
}
void CloudMusicPlayer::InitSystemTrayIcon()
{
mySystemTray=new QSystemTrayIcon(this);
mySystemTray->setIcon(QIcon(":/new/prefix1/img/image/systemTrayIcon.png"));
mySystemTray->setToolTip("CloudMusic");
connect(mySystemTray,SIGNAL(activated(QSystemTrayIcon::ActivationReason)),this,SLOT(systemTrayIcon_activated(QSystemTrayIcon::ActivationReason)));
QAction *action_systemTray_pre=new QAction(QIcon(":/new/prefix1/img/image/pre2.png"),"上一首",this);
connect(action_systemTray_pre,SIGNAL(triggered(bool)),this,SLOT(doProcess_btn_preClick()));
QAction *action_systemTray_play=new QAction(QIcon(":/new/prefix1/img/image/play2.png"),"播放",this);
connect(action_systemTray_play,SIGNAL(triggered(bool)),this,SLOT(doProcess_btn_playClick()));
QAction *action_systemTray_next=new QAction(QIcon(":/new/prefix1/img/image/next2.png"),"下一首",this);
connect(action_systemTray_next,SIGNAL(triggered(bool)),this,SLOT(doProcess_btn_nextClick()));
QAction *action_systemTray_quit = new QAction(QIcon(":/new/prefix1/img/image/exit.png"), "退出",this);
connect(action_systemTray_quit, SIGNAL(triggered(bool)), this, SLOT(close()));
QMenu *pContextMenu = new QMenu(this);
pContextMenu->addAction(action_systemTray_pre);
pContextMenu->addAction(action_systemTray_play);
pContextMenu->addAction(action_systemTray_next);
pContextMenu->addAction(action_systemTray_quit);
mySystemTray->setContextMenu(pContextMenu);
mySystemTray->show();
}
void CloudMusicPlayer::systemTrayIcon_activated(QSystemTrayIcon::ActivationReason reason)
{
switch (reason)
{
case QSystemTrayIcon::DoubleClick:
if(isHidden()){
show();
}else{
hide();
}
break;
default:
break;
}
}
void CloudMusicPlayer::mousePressEvent(QMouseEvent *event)
{
if(this==QApplication::widgetAt(event->globalPos()))
{
m_lastPos=event->globalPos();
isPressQMusicWidget=true;
}
}
void CloudMusicPlayer::mouseMoveEvent(QMouseEvent *event)
{
if(isPressQMusicWidget)
{
this->move(this->x()+(event->globalX()-m_lastPos.x()),
this->y()+(event->globalY()-m_lastPos.y()));
m_lastPos=event->globalPos();
}
}
void CloudMusicPlayer::mouseReleaseEvent(QMouseEvent *event)
{
m_lastPos=event->globalPos();
isPressQMusicWidget=false;
}
void CloudMusicPlayer::doProcessbtn_SkinClick()
{
QAction *action_backgroud_to_default = new QAction(QIcon(":/new/prefix1/img/background/default.jpg"),"默认背景",this);
connect(action_backgroud_to_default,SIGNAL(triggered(bool)),this,SLOT(doProcessbtnbackgroud_to_default()));
QAction *action_backgroud_to_custom=new QAction(QIcon(":/new/prefix1/img/image/setting.png"),"自定义背景",this);
connect(action_backgroud_to_custom,SIGNAL(triggered(bool)),this,SLOT(doProcessbtnbackgroud_to_custom()));
menu_changeSkin=new QMenu(this);
menu_changeSkin->addAction(action_backgroud_to_default);
menu_changeSkin->addAction(action_backgroud_to_custom);
menu_changeSkin->exec(QCursor::pos());
}
void CloudMusicPlayer::doProcessbtnbackgroud_to_default()
{
QString fileName=":/new/prefix1/img/background/default.jpg";
QSettings mysettings("./CloudMusic.ini",QSettings::IniFormat);
mysettings.setIniCodec("UTF8");
mysettings.setValue("background/image-url",fileName);
setStyleSheet(QString("QWidget#CloudMusicPlayer{"
"border-radius:10px;"
"border-image: url(%1);}"
"listWidget{"
"border:none;}").arg(fileName));
qDebug()<<"1:"<<fileName<<endl;
}
void CloudMusicPlayer::doProcessbtnbackgroud_to_custom()
{
QString fileName=QFileDialog::getOpenFileName(this,"选择自定义背景图片","C:\\Users\\gys\\Pictures","图片文件(*jpg *png)");
if(!fileName.isEmpty())
{
QImage testImage(fileName);
if(!testImage.isNull())
{
QSettings mysettings("./CloudMusic.ini",QSettings::IniFormat);
mysettings.setIniCodec("UTF8");
mysettings.setValue("background/image-url",fileName);
setStyleSheet(QString("QWidget#CloudMusicPlayer{"
"border-radius:10px;"
"border-image: url(%1);}"
"listWidget{"
"border:none;}").arg(fileName));
qDebug()<<"2:"<<fileName<<endl;
}
}
}
void CloudMusicPlayer::UpdateDialogWidget()
{
loginwidget->hide();
userRegisterPage= new userRegister();
dialog->layout()->addWidget(userRegisterPage);
dialog->layout()->update();
dialog->exec();
int x = this->pos().x() + (this->width() - userRegisterPage->width()) / 2;
int y = this->pos().y() + (this->height() - userRegisterPage->height()) / 2;
userRegisterPage->move(x, y);
}
#ifndef LOGINWIDGET_H
#define LOGINWIDGET_H
#include <QWidget>
#include <QSqlDatabase>
#include "userregister.h"
#include<QPixmap>
#include<QPainter>
#include<QDialog>
class userRegister;
namespace Ui {
class loginWidget;
}
class loginWidget : public QWidget
{
Q_OBJECT
public:
explicit loginWidget(QWidget *parent = 0);
~loginWidget();
friend class CloudMusicPlayer;
private:
Ui::loginWidget *ui;
void Init();
QSqlDatabase db;
userRegister *userRegisterPage;
void paintEvent(QPaintEvent *);
private slots:
void doProcessLoginIn();
void doProcessRegister();
void reBackToLoginWidget();
signals:
void signal_loginSuccess();
void signal_register_click();
void signal_loginName(QString);
};
#endif
#include "loginwidget.h"
#include "ui_loginwidget.h"
#include<QSqlDatabase>
#include<QSqlQuery>
#include<QDebug>
#include<QSqlRecord>
#include<QSqlError>
#include<QMessageBox>
loginWidget::loginWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::loginWidget)
{
ui->setupUi(this);
setFixedSize(400, 300);
setWindowIcon(QIcon(":/new/prefix1/img/image/systemTrayIcon.png"));
Init();
}
loginWidget::~loginWidget()
{
delete ui;
}
void loginWidget::Init()
{
if(QSqlDatabase::contains("qt_sql_default_connection"))
{
db=QSqlDatabase::database("qt_sql_default_connection");
}
else
{
db=QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("userNameAndPwd1.db");
if(!db.open())
{
qDebug()<<"数据库打开失败";
QMessageBox::critical(this,"无法打开数据库文件:userNameAndPwd1.db",db.lastError().databaseText());
exit(-1);
}
else
{
qDebug()<<"数据库打开成功";
}
}
QSqlQuery query;
query.exec(QString("select count(*) from sqlite_master where type='table' and name='%1'").arg("MusicInfo"));
if(query.next()){
if(query.value(0).toInt()==0){
QSqlQuery sql_query;
QString create_sql = "create table MusicInfo (userName varchar(30), url varchar(200), author varchar(50), title varchar(50), duration bigint, albumTitle varchar(50), audioBitRate int)";
sql_query.prepare(create_sql);
sql_query.exec();
}
}
QSqlQuery query2;
query2.exec(QString("select count(*) from sqlite_master where type='table' and name='%1'").arg("UsrNamePwd"));
if(query2.next()){
if(query2.value(0).toInt()==0){
QSqlQuery sql_query;
QString create_sql = "create table UsrNamePwd (userName varchar(30),userPwd varchar(30))";
sql_query.prepare(create_sql);
sql_query.exec();
}
}
connect(ui->btn_Login_in_2,SIGNAL(clicked(bool)),this,SLOT(doProcessLoginIn()));
connect(ui->btn_Register_2,SIGNAL(clicked(bool)),this,SLOT(doProcessRegister()));
}
void loginWidget::doProcessLoginIn()
{
db=QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("userNameAndPwd1.db");
if(!db.open())
{
qDebug()<<"数据库打开失败";
QMessageBox::critical(this,"无法打开数据库文件:userNameAndPwd1.db",db.lastError().databaseText());
exit(-1);
}
else
{
qDebug()<<"数据库打开成功";
}
QString sql="select * from UsrNamePwd";
QSqlQuery q;
if(!q.exec(sql))
{
qDebug() << "loginwidget------Error: Fail to create table." << q.lastError();
db.close();
}
while (q.next())
{
QString userName = ui->lineEdit_userName_2->text();
QString userPwd = ui->lineEdit_userPwd_2->text();
if(!(userName.isEmpty()) && !(userPwd.isEmpty()))
{
if(userName==q.value(0).toString())
{
if(userPwd==q.value(1).toString())
{
QMessageBox::about(this,"Success","登录成功!");
emit signal_loginSuccess();
emit signal_loginName(userName);
qDebug()<<"信号发送成功signal_loginSuccess"<<endl;
ui->lineEdit_userName_2->clear();
ui->lineEdit_userPwd_2->clear();
return;
}
else
{
QMessageBox::warning(this,"Warning","密码错误!");
}
}
}
else
{
qDebug()<<"用户名或密码为空!"<<endl;
return;
}
}
}
void loginWidget::doProcessRegister()
{
userRegisterPage= new userRegister();
emit signal_register_click();
qDebug()<<"信号发送成功signal_register_click"<<endl;
connect(userRegisterPage,SIGNAL(backToLoginWidget()),this,SLOT(reBackToLoginWidget()));
}
void loginWidget::paintEvent(QPaintEvent *)
{
QPixmap pixmap=QPixmap(":/new/prefix1/img/background/default.jpg");
QPainter painter(this);
painter.drawPixmap(this->rect(),pixmap);
}
void loginWidget::reBackToLoginWidget()
{
delete userRegisterPage;
}
#ifndef USERREGISTER_H
#define USERREGISTER_H
#include <QWidget>
#include<QLabel>
#include<QLineEdit>
#include<QGridLayout>
#include<QPushButton>
#include<QSqlDatabase>
#include<QSqlQuery>
#include<QDebug>
#include<QSqlRecord>
#include<QSqlError>
#include<QMessageBox>
#include<QPainter>
class userRegister : public QWidget
{
Q_OBJECT
public:
explicit userRegister(QWidget *parent = 0);
signals:
void backToLoginWidget();
public slots:
void doProcessRegister();
private:
void Init();
QSqlDatabase db;
QLabel *lbl_username;
QLabel *lbl_userPwd1;
QLabel *lbl_userPwd2;
QLineEdit *liedt_username;
QLineEdit *liedt_userPwd1;
QLineEdit *liedt_userPwd2;
QGridLayout *mainLayout;
QPushButton *register_d;
void paintEvent(QPaintEvent *);
};
#endif
#include "userregister.h"
userRegister::userRegister(QWidget *parent) : QWidget(parent)
{
setFixedSize(400, 300);
setWindowTitle(tr("用户注册"));
setWindowIcon(QIcon(":/new/prefix1/img/image/systemTrayIcon.png"));
Init();
}
void userRegister::Init()
{
db=QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("userNameAndPwd1.db");
if(!db.open())
{
qDebug()<<"数据库打开失败";
}
else
{
qDebug()<<"数据库打开成功";
}
lbl_username=new QLabel(tr("用户名:"));
lbl_userPwd1=new QLabel(tr("请输入密码:"));
lbl_userPwd2=new QLabel(tr("请再次输入密码:"));
liedt_username=new QLineEdit();
liedt_userPwd1=new QLineEdit();
liedt_userPwd2=new QLineEdit();
register_d=new QPushButton(tr("确认注册"));
mainLayout = new QGridLayout(this);
mainLayout->addWidget(lbl_username,0,0);
mainLayout->addWidget(lbl_userPwd1,1,0);
mainLayout->addWidget(lbl_userPwd2,2,0);
mainLayout->addWidget(liedt_username,0,1);
mainLayout->addWidget(liedt_userPwd1,1,1);
mainLayout->addWidget(liedt_userPwd2,2,1);
mainLayout->addWidget(register_d,3,0,1,2);
connect(register_d,SIGNAL(clicked(bool)),this,SLOT(doProcessRegister()));
}
void userRegister::doProcessRegister()
{
QString regName=liedt_username->text();
QString regPwd1=liedt_userPwd1->text();
QString regPwd2=liedt_userPwd2->text();
QSqlQuery q;
QString sql1="select * from UsrNamePwd WHERE userName==";
sql1+="\'"+regName+"\'";
if(!q.exec(sql1))
{
qDebug() << "regName---Error: Fail to create table." << q.lastError();
db.close();
}
while(q.next())
{
if(regName==q.value(0).toString())
{
QMessageBox::warning(this,"Warning","当前用户名已被注册!请重新输入用户名");
liedt_username->selectAll();
return;
}
}
if(!(regName.isEmpty()) && !(regPwd1.isEmpty()) && !(regPwd2.isEmpty()))
{
if(regPwd1!=regPwd2)
{
QMessageBox::warning(this,"Warning","请确保两次输入的密码相同!");
return;
}
QString sql="INSERT INTO UsrNamePwd(userName,userPwd)VALUES(";
sql+="\'"+regName+"\'"+","+"\'"+regPwd1+"\'"+")";
if(!q.exec(sql))
{
qDebug() << "Error: Fail to create table." << q.lastError();
db.close();
}
QMessageBox::about(this,"Success","注册成功!请重新登录");
qDebug()<<"注册成功!"<<endl;
emit backToLoginWidget();
this->hide();
}
else
{
qDebug()<<"用户名或密码为空!"<<endl;
}
}
void userRegister::paintEvent(QPaintEvent *)
{
QPixmap pixmap=QPixmap(":/new/prefix1/img/background/default.jpg");
QPainter painter(this);
painter.drawPixmap(this->rect(),pixmap);
}
#include "cloudmusicplayer.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
CloudMusicPlayer w;
w.show();
return a.exec();
}