部分窗口用到了可视化布局(头文件里有Ui::的),还有就是起名有点乱,先是头文件,具体实现功能可以看我的另一篇博文
Addadmin.h
#ifndef _ADDADMIN_H_
#define _ADDADMIN_H_
//管理员账号添加窗口
#include <QWidget>
#include <QSqlQuery>
#include <QSqlDataBase>
#include <QMessageBox>
#include "ui_Addadmin.h"
class Addadmin : public QWidget
{
Q_OBJECT
public:
Addadmin(QWidget *parent = Q_NULLPTR);
~Addadmin();
Ui::Addadmin ui;//ui设为publi可让外部修改窗口相关内容,add_id跟goback为添加跟返回按钮,line_id跟line_pw为账号密码输入栏
signals:
void add_success();//添加成功后会发送该信号
private:
void add_into();//把管理员账号添加到数据库的表中
};
#endif // !_ADDADMIN_H_
Administrators.h
#include <QDebug>
#include "MysqlDB.h"
#include "QStuResign.h"
#include "Resetpw.h"
#include "QStudentIM.h"
#include "Message.h"
class Administrators : public QMainWindow
{
Q_OBJECT
public:
Administrators(QString admin_id, QWidget *parent = Q_NULLPTR);
//在登录后,会把账号栏的账号传入到该构造函数,用于密码修改时作为判断条件
signals:
void closewin();//在调用修改密码窗口的时候,与密码修改窗口(子窗口)的关闭connect起来
private:
void saveItem();//保存当前你表格的内容,表格内容部分可双击编辑,直接编辑之后需要点击保存来调用该方法进行保存
void createRow();//创建新的学生信息
void deleteRow();//删除学生信息
void editRow();//编辑学生信息
void serchRow();//打开搜索窗口
void sendMes();//发送消息(公告)
void reflash();//刷新,搜索后可点刷新来恢复
void resetPw();//打开修改密码的窗口
void exitTable();//返回到登录界面
void changeKey(QString pw_old, QString pw_new);//调用该方法来修改密码
void lookFor(QVariantMap rowdata);//获取搜索窗口输入的内容,并且进行搜索
void readsql(QList<QStringList>);//读取Qlist<QStringList>容器里的内容到表格
MysqlDB link;//用来访问“读取数据库”的方法
QTableWidget * table;//表格,在这里声明是为了让其他方法能够对表格进行修改
QString admin_id;//用于储存传入构造函数的参数
};
#endif
Message.h
#ifndef _MESSAGE_H_
#define _MESSAGE_H_
//用于发布消息的窗口
#include <QMainWindow>
#include "ui_Message.h"
#include "MysqlDB.h"
class Message : public QMainWindow
{
Q_OBJECT
public:
Message(QWidget *parent = Q_NULLPTR);
~Message();
private:
void sendMes();//发布消息,跟按钮的按下信号相连接
void setLine(int index);//与combobox的activated信号相连接,获取combobox当前
//的选项,若为“所有学生”则关闭lineEdit的输入
Ui::Message ui;//com_sendto为combobox组件,pushbutton为发布消息按钮,l_message为要学号输入栏,t_message为消息输入栏
};
#endif // !_MESSAGE_H_
MysqlDB.h
#ifndef _MYSQLDB_H_
#define _MYSQLDB_H_
//链接数据库
#include <QStringList>
#include <QVariantMap>
#include <QList>
#include <QMessageBox>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QPluginLoader>
#include <QDebug>
#include <QMessageBox>
#include <QObject>
#include <fstream>
#include <String>
class MysqlDB :public QObject{
Q_OBJECT
public:
MysqlDB();
void initDB();//连接数据库
QList<QStringList> selectfrom();//读取数据库的student表的所有信息并返回
signals:
void link_fail();//连接失败时发送该信号
};
#endif // !_MYSQLDB_H_
QStudentIM.h
#ifndef _QSTUDENTIM_H_
#define _QSTUDENTIM_H_
//登录界面
#include <QtWidgets/QMainWindow>
#include <QLineEdit>
#include <QPushButton>
#include <QRadioButton>
#include <QStringList>
#include <QLabel>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QSpacerItem>
#include <QBitmap>
#include <QMouseEvent>
#include "StudentPort.h"
#include "QStuResign.h"
#include "Administrators.h"
#include "Addadmin.h"
class QStudentIM : public QMainWindow
{
Q_OBJECT
public:
QStudentIM(QWidget *parent = Q_NULLPTR);
void myshow();//在执行show之前先检测数据库里是否有管理员表以及账户密码,没有则提示首
//次使用,并弹出管理员账户添加窗口
private:
void login_sys();//登录按钮相连的方法,检测账号密码并登录
void button_clear(bool);//清空账号、密码栏的内容
void resign();//打开注册窗口
void setwin_mini(bool);//窗口最小化
void setwin_quit(bool);//窗口关闭
void mousePressEvent(QMouseEvent *event);//重写鼠标按下事件,用于移动窗口
void mouseMoveEvent(QMouseEvent *event);//鼠标移动事件
void mouseReleaseEvent(QMouseEvent *event);//鼠标松开事件
QWidget * widget;//centerWidget,mainWindow设透明,widget添加背景即可自定义不规则窗口
QLineEdit * id;//账号输入栏
QLineEdit * password;//密码输入栏
QPushButton * login;//登录按钮
QPushButton * clear;//重置按钮
QPushButton * enroll;//注册按钮
QRadioButton * Admin;//管理员(单选)
QRadioButton * Student;//学生
QPushButton * win_mini;//最小化按钮
QPushButton * win_quit;//退出按钮
QPoint last;//配合鼠标事件重写,用于储存按下后的坐标位置
};
#endif // !_QSTUDENTIM_H_
QStuResign.h
#ifndef _QSTURESIGN_H_
#define _QSTURESIGN_H_
//注册、添加、修改、搜索共用窗口
#include <QMainWindow>
#include "ui_QStuResign.h"
#include "MysqlDB.h"
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QMessageBox>
class QStuResign : public QMainWindow
{
Q_OBJECT
//line_num、line_pw、line_name、com_sex、line_col、line_maj分别为学号、密码、姓名、性别选择、学院、专业输入栏
public:
QStuResign(QWidget *parent = Q_NULLPTR);
~QStuResign();
Ui::QStuResign ui;//public方便外部修改。enroll、clear、goback为注册窗口下方三个按钮
QString temp;//用于储存“注册”、“添加”或“搜索”
QString firstId;//用于储存最开始的账号,修改学生账号的时候用于条件判断
signals:
void get_message(QVariantMap rowdata);//发送所有输入信息
signals:
void addSuccess();//添加成功后发出信号
private:
void get_mes();//获取所有输入信息
void set_null();//清空所有lineEdit
void goback();//返回(其实并没有定义)
void insert_sql(QVariantMap rowdata);//插入信息到输入库的student表
};
#endif // !_QSTURESIGN_H_
Readmes.h
#ifndef _READMES_H_
#define _READMES_H_
//学生读取消息的窗口
#include <QMainWindow>
#include "ui_Readmes.h"
class Readmes : public QMainWindow
{
Q_OBJECT
public:
Readmes(QWidget *parent = Q_NULLPTR);
~Readmes();
Ui::Readmes ui;//方便外部修改,pushbutton为“已读”按钮
//private:
};
#endif // !_READMES_H_
Resetpw.h
#ifndef _RESETPW_H_
#define _RESETPW_H_
//学生以及管理员修改密码用的窗口
#include <QMainWindow>
#include <QMessageBox>
#include "ui_Resetpw.h"
class Resetpw : public QMainWindow
{
Q_OBJECT
public:
Resetpw(QWidget *parent = Q_NULLPTR);
~Resetpw();
Ui::Resetpw ui;//方便修改、pw_now、pw_new为当前密码以及新密码的输入栏,pushbutton为确认修改按钮
signals:
void sendtext(QString pw_old, QString pw_new);//发送所输入的新旧密码
private:
void send();//获取输入的新旧密码并发送
};
#endif // !_RESETPW_H_
StudentPort.h
#include <QToolBar>
#include "MysqlDB.h"
#include "Resetpw.h"
#include "Readmes.h"
#include "QStudentIM.h"
class StudentPort : public QMainWindow
{
Q_OBJECT
public:
StudentPort(QString id,QWidget *parent = Q_NULLPTR);//传入id用于修改时作为判断条件
signals:
void closewin();//密码修改成功后发送该信号,与密码修改窗口的关闭相连接
private:
void sava_data();//保存用户做出的修改
void change_sex();//改变性别
void resetPw();//打开密码修改窗口
void change_key(QString pw_old, QString pw_new);//修改密码
void check_mes();//检查是否有未读消息,有则会显示强迫症小红点
void readmes();//读取消息
void afterRead();//把状态改为已读,取消小红点
void reflash();//刷新
void exitTable();//返回到登录界面
MysqlDB link;//用于调用读取student表的方法
QString stu_id;//用于储存最开始的账号(刚登陆时)
QTableWidget * table;//表格组件
QAction *read_mes;//读取消息的动作,声明在这里是为了方便方法对其图标进行更改
};
#endif // !_STUDENTPORT_H_
Addadmin.cpp
#include "Addadmin.h"
Addadmin::Addadmin(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
connect(ui.add_id, &QPushButton::clicked, this, &Addadmin::add_into);
setAttribute(Qt::WA_DeleteOnClose);
}
void Addadmin::add_into() {
QString id = ui.line_id->text();
QString pw = ui.line_pw->text();
QSqlQuery info;
QString sql = QString("insert into admin(id,pw) value('%1','%2')").arg(id).arg(pw);
bool result = info.exec(sql);
if (id == NULL || pw == NULL) {
result = false;
}
if (result) {
emit add_success();
this->close();
QMessageBox::information(this, u8"提示", u8"添加成功");
}
else {
QMessageBox::information(this, u8"提示", u8"添加失败");
}
}
Addadmin::~Addadmin()
{
}
Administrators.cpp
#i