[领卓教育]使用QT实现一个简单的离线词典

效果展示

首先登录界面:

登录界面展示

查词界面:

查询

代码区

部分重要代码:

  1. 登陆(注册)部分:
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("用户名不存在     ")) ;
   	 }
}	
  1. 查词部分:
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")) ;
    }

到这里已经可以实现查词功能,具体美化可以自定义一个标题栏(
包括重写鼠标事件).

猜你喜欢

转载自blog.csdn.net/a1421604395/article/details/83312849
今日推荐