第三天项目日记
1、今日总结
今天继续写服务器
1)客户端要有一个登录的功能,所以服务器要连接数据库(这里用的时sqlite3)
2)实现了数据库的单例
3)在启动客户端时如果没有该数据库就创建该数据库,创建的数据库在程序运行路径
4)如果数据库中没有用户表就创建表
2、设计思路
因为数据库只有一个并且只有服务器会用,所以就直接写成单例模式,并且写自己的函数接口,供主窗口函数调用。
3、代码说明
dbhelper.h
#ifndef DBHELPER_H
#define DBHELPER_H
#include <QObject>
#include <QWidget>
#include <QtSql/QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
class dbhelper
{
private:
dbhelper(QString driver);
static dbhelper* instance;
QSqlDatabase *db;
// QSqlQuery *query;
QString driver;
public:
static dbhelper *getIntance(QString);//传递驱动
void setDatabaseName(QString); //传递路径
void create_user_table();//创建表
bool open();//打开
void close();//关闭
};
#endif // DBHELPER_H
dbhelper.cpp
#include "dbhelper.h"
#include <QDebug>
dbhelper::dbhelper(QString driver)
{
db = new QSqlDatabase;
*db = QSqlDatabase::addDatabase(driver);
}
dbhelper *dbhelper::getIntance(QString driver)
{
if(instance == NULL){
instance = new dbhelper(driver);
instance->driver = driver;
}
return instance;
}
void dbhelper::setDatabaseName(QString db_path)
{
QString db_name = db_path + "/db.db";
db->setDatabaseName(db_name);
}
void dbhelper::create_user_table()
{
QSqlQuery query(*db);
query.exec("CREATE TABLE IF NOT EXISTS user ("
"id INTEGER PRIMARY KEY AUTOINCREMENT, "
"name VARCHAR(50) NOT NULL, "
"pswd VARCHAR(50) NOT NULL, "
"state INTEGER DEFAULT(0))");
}
bool dbhelper::open()
{
bool ret = db->open();
return ret;
}
void dbhelper::close()
{
db->close();
}
其他
添加服务器退出时的日志,只有开启时,再退出才会写关闭日志
写到析构函数里面
增加了一个事件显示label用来QTimer用来显示实时事件
数据库的初始化
4、项目文件
5、效果展示
测试如下,在没有数据库的情况下,自动生成数据库数据表。
点击关闭之后会记录日志
当前时间也会一直显示
有一个小问题就是关闭mainwindow之后程序还没有退出,需要重写一下closeEvent即可
,代码中已经进行了修改。
6、每日总结
学会使用的Qt库 QSqlDatabase QSqlQuery QSqlError
有志者,事竟成!!!!!!