使用的QT版本:5.9.0
使用的数据库:MySQL
下面是我的整个学生信息管理系统的框架
连接数据库
1.确保自己的qt的位数是和MySQL是相同的(同为32位或是64位)
2.在.pro文件中加入 qt += sql
3.添加以下代码(需要#include <QSqlDatabase>)
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("127.0.0.1");
db.setPort(3306);
db.setDatabaseName("数据库名称");
db.setUserName("账号");
db.setPassword("密码");
4.若连接不了,报错,则下载ODBC进行连接并且把以上代码"QMYSQL"改为"QODBC"
下面成品展示
最后有源码
界面切换的实现
#include <QStackedLayout>
使用该库实现多界面的转换功能
QStackedLayout继承自QLayout。
QStackedLayout类提供了多页面切换的布局,一次只能看到一个界面。
QStackedLayout可用于创建类似于QTabWidget提供的用户界面。
#include "widget.h" //必须包含各个界面的头文件,不加用不了他的构造函数
#include "ui_widget.h"
#include <QStackedLayout>
#include "addstudentwidget.h"
#include "menuwidget.h"
#include "selectwidget.h"
#include "changeinfowidget.h"
#include "createwidget.h"
#include "login.h"
#include "coursewidget.h"
#include "student.h"
#include "forgetwidget.h"
#include <QApplication>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
setFixedSize(750,430);
setWindowTitle("学生信息管理系统");
menuwidget = new menuWidget; //添加相关头文件
addstudentWidget = new addstudentwidget;
selectwidget = new selectWidget;
changeinfoWidget = new changeinfowidget;
Login = new login;
createWidget = new createwidget;
courseWidget = new coursewidget;
Student = new student;
forgetWidget = new forgetwidget;
stackLayout = new QStackedLayout;
stackLayout->addWidget(Login);//0
stackLayout->addWidget(menuwidget);//1
stackLayout->addWidget(addstudentWidget);//2
stackLayout->addWidget(selectwidget);//3
stackLayout->addWidget(changeinfoWidget);//4
stackLayout->addWidget(createWidget);//5
stackLayout->addWidget(courseWidget);//6
stackLayout->addWidget(Student);//7
stackLayout->addWidget(forgetWidget);//8
setLayout(stackLayout);
connect(Login, &login::display, stackLayout, &QStackedLayout::setCurrentIndex);
connect(menuwidget, &menuWidget::display, stackLayout, &QStackedLayout::setCurrentIndex);
connect(addstudentWidget, &addstudentwidget::display, stackLayout, &QStackedLayout::setCurrentIndex);
connect(selectwidget, &selectWidget::display, stackLayout, &QStackedLayout::setCurrentIndex);
connect(changeinfoWidget, &changeinfowidget::display, stackLayout, &QStackedLayout::setCurrentIndex);
connect(createWidget, &createwidget::display, stackLayout, &QStackedLayout::setCurrentIndex);
connect(courseWidget, &coursewidget::display, stackLayout, &QStackedLayout::setCurrentIndex);
connect(Student, &student::display, stackLayout, &QStackedLayout::setCurrentIndex);
connect(forgetWidget, &forgetwidget::display, stackLayout, &QStackedLayout::setCurrentIndex);
}
信号与槽的实现
在头文件中加入该信号:
signals:
void display(int number);
中间传入的数字对应于上面代码中注释的界面
举例一个槽函数
void menuWidget::on_addbutton_clicked(){
emit display(2);
}
点击添加学生信息直接跳转
学生数据的增删改查
主要通过QsqlQuery头文件实现,和tableview的控件展示表的内容
#include <QSqlQuery>
#include <QSqlQueryModel>
#include <QSqlTableModel>
QSqlTableModel * model = new QSqlTableModel(this);
QSqlQueryModel * qmodel = new QSqlQueryModel;
model->setTable("all_students");
model->select();
model->setEditStrategy(QSqlTableModel::OnManualSubmit);//设置编辑策略
QString str = QString("SELECT * FROM all_students");//语句和MySQL的增删改查语句完全一样
qmodel->setQuery(str);
ui->tableView->setModel(qmodel);
ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);//只读模式
https://download.csdn.net/download/qq_16656875/20585834?spm=1001.2014.3001.5503
源代码下载