[领卓教育]使用QT实现一个简单的离线词典
效果展示
首先登录界面:
查词界面:
代码区
部分重要代码:
- 登陆(注册)部分:
1). 数据库的打开:
` //数据库
db = QSqlDatabase::addDatabase("QSQLITE") ;
db.setDatabaseName("user.db");
if(!db.open())
{
QMessageBox::critical(this,tr("打开错误"),tr("打开数据库失败"));
}
QSqlQuery query ;
QStringList table = db.tables(QSql::Tables) ;
qDebug()<<"table:"<<table ;
if( !table.contains("user") )
{
QString sql = tr("create table user (name text primary key,passwd text);");
qDebug()<<"sql :"<<sql ;
if(! query.exec(sql))
{
QMessageBox::warning(NULL,tr("User"),tr("Create Error")) ;
}
}
if( !table.contains("record") )
{
QString sql = tr("create table record (name text,word text,mean text);");
qDebug()<<"sql_pic :"<<sql ;
if(! query.exec(sql))
{
QMessageBox::warning(NULL,tr("User"),tr("Create Error")) ;
}
}`:
2). 注册与登陆:
void app::on_pushButton_register_clicked()//注册一个用户
{
//qDebug()<<ui->lineEdit_pwd->text();
/********从lineedit获得用户名和密码***********/
this->name = ui->lineEdit_num->text();
this->passwd = ui->lineEdit_pwd->text();
/********在数据库中检索用户名是否存在***********/
QString sql = tr("select * from user where name ='%0';").arg(name);
QSqlQuery query;
qDebug()<<"register sql :"<<sql ;
if(! query.exec(sql))
{
QMessageBox::warning(NULL,tr("Register"),tr("Register select failed")) ;
}
/***************判断用户名是否存在************/
/*******不存在则保存这个用户信息到数据库*******/
if(query.next())
{
QMessageBox::warning(NULL,tr("Register"),tr("\n 用户名已存在 \n")) ;
}
else
{
sql = tr("insert into user values('%0','%1');").arg(name).arg(passwd);
qDebug()<<"register sql :"<<sql ;
if(! query.exec(sql))
{
QMessageBox::warning(NULL,tr("Register"),tr("Register insert failed")) ;
}
}
}
void app::on_pushButton_login_clicked()//登录
{
/********从lineedit获得用户名和密码***********/
this->name = ui->lineEdit_num->text();
this->passwd = ui->lineEdit_pwd->text();
/***********在数据库中检索用户信息***********/
QString sql = tr("select * from user where name ='%0' ;").arg(name);
QSqlQuery query;
qDebug()<<"register sql :"<<sql ;
if(! query.exec(sql))
{
QMessageBox::warning(NULL,tr("Register"),tr("login select failed")) ;
}
if(query.next())
{
/*****此时在数据库中检测到用户名*****/
/********登录密码是否正确**********/
/**********正确则登陆成功**********/
/**********错误则登陆失败**********/
if(query.value("passwd").toString() == passwd)
{
qDebug()<<"true" ;
QMessageBox::warning(NULL,tr("Login"),tr("登陆成功 ")) ;
word_t * ww = new word_t;
ww->name = this->name;
ww->show();
this->hide();
db.close();
}
else
{
qDebug()<<"false" ;
QMessageBox::warning(NULL,tr("Login"),tr("密码错误 ")) ;
}
}
else
{
/********用户不存在**********/
QMessageBox::warning(NULL,tr("Login"),tr("用户名不存在 ")) ;
}
}
- 查词部分:
void word_t::on_pushButton_Query_clicked()
{
//qDebug()<<ui->lineEdit_Word->text();
/*********每查询一次自动清空显示区**********/
ui->textEdit_mean->clear();
this->word = ui->lineEdit_Word->text();
/*********打开词典(dict)文件**********/
QFile * fil ;
fil = new QFile("./word/dict.txt");
fil->open(QIODevice::ReadOnly|QIODevice::Text);
char buf[1024];
char newword[100];
strcpy(newword,word.toUtf8().data());
strcat(newword," ");
/*********每次从dict文件中读一行数据与输入单词进行比较**********/
while(fil->readLine(buf,sizeof(buf))!=-1)
{
//qDebug()<<"mean :"<<buf ;
/*********查到单词则跳出循环**********/
if(strncmp(newword,buf,strlen(newword))==0)
{
ui->textEdit_mean->setText(QString(buf));
break;
}
}
/*********读到文件末尾仍未检索到单词**********/
/******则单词不存在,跳出此函数,不继续执行******/
if(ui->textEdit_mean->toPlainText().isEmpty())
{
QMessageBox::warning(NULL,tr("Query"),tr("未找到")) ;
return;
}
/******单词存在则保存到数据库(查询历史)******/
this->mean = ui->textEdit_mean->toPlainText();
QString sql = tr("select * from record;");
QSqlQuery query;
qDebug()<<"query sql :"<<sql ;
if(! query.exec(sql))
{
QMessageBox::warning(NULL,tr("Query"),tr("Query select failed")) ;
}
sql = tr("insert into record values('%0','%1','%2');").arg(name).arg(word).arg(mean);
qDebug()<<"register sql :"<<sql ;
if(! query.exec(sql))
{
QMessageBox::warning(NULL,tr("Register"),tr("Register insert failed")) ;
}
到这里已经可以实现查词功能,具体美化可以自定义一个标题栏(
包括重写鼠标事件).