基于QT的毕业设计项目管理系统(包含源代码+详细系统简介+全文12页)QT代码学习攻略

【项目资源如下】

基于QT的毕业设计项目管理系统(包含源代码+详细系统简介+全文12页)资源-CSDN文库icon-default.png?t=O83Ahttps://download.csdn.net/download/m0_72216164/89825128开头附上工作招聘面试必备问题噢~~包括综合面试题、无领导小组面试题资源文件免费!全文6000+干货。

工作招聘无领导小组面试全攻略最常见面试题(第一部分)共有17章+可用于国企私企合资企业工作招聘面试+面试必备心得面试总结资源-CSDN文库icon-default.png?t=O83Ahttps://download.csdn.net/download/m0_72216164/89789118?spm=1001.2014.3001.5503

工作招聘综合面试最常见面试题44页内容第一部分重点+用于国企私企合资企业工作招聘面试+适合各种不同专业学生资源-CSDN文库icon-default.png?t=O83Ahttps://download.csdn.net/download/m0_72216164/89788716

目录

部分代码

1. 项目目录结构

2. main.cpp

3. mainwindow.h

4. mainwindow.cpp (开头部分)

5. mainwindow.cpp 

6. projectmodel.h

7. projectmodel.cpp

8. projectview.h

9. projectview.cpp

10. projectcontroller.h

11. projectcontroller.cpp


项目简介

项目名称:毕业设计选题管理系统

项目描述:这是一个简单的毕业设计选题管理系统,用于帮助学生和教师进行毕业设计的选题和分配。系统包括用户登录、选题列表显示、选题详情查看、选题分配等功能。使用Qt框架进行开发,采用MVC(Model-View-Controller)设计模式,使代码结构清晰、易于维护。

部分代码

1. 项目目录结构

复制代码

GraduationProjectSelection/

├── main.cpp

├── mainwindow.cpp

├── mainwindow.h

├── mainwindow.ui

├── models/

│ └── projectmodel.cpp

│ └── projectmodel.h

├── views/

│ └── projectview.cpp

│ └── projectview.h

└── controllers/

└── projectcontroller.cpp

└── projectcontroller.h

2. main.cpp

cpp

#include <QApplication> 

#include "mainwindow.h" 

int main(int argc, char *argv[]) 

{

QApplication a(argc, argv);

MainWindow w;

w.show();

return a.exec();

}

3. mainwindow.h

cpp复制代码

#ifndef MAINWINDOW_H

#define MAINWINDOW_H

#include <QMainWindow> 

#include "controllers/projectcontroller.h" 

#include "views/projectview.h" 

QT_BEGIN_NAMESPACE

namespace Ui { class MainWindow; }

QT_END_NAMESPACE

class MainWindow : public QMainWindow

{

Q_OBJECT

public:

MainWindow(QWidget *parent = nullptr);

~MainWindow();

private slots:

void on_loginButton_clicked();

void on_projectListView_clicked(const QModelIndex &index);

private:

Ui::MainWindow *ui;

ProjectController *projectController;

ProjectView *projectView;

};

#endif // MAINWINDOW_H

4. mainwindow.cpp (开头部分)

cpp复制代码

#include "mainwindow.h" 

#include "ui_mainwindow.h" 

#include <QMessageBox> 

#include <QLineEdit> 

MainWindow::MainWindow(QWidget *parent)

: QMainWindow(parent)

, ui(new Ui::MainWindow)

, projectController(new ProjectController(this))

, projectView(new ProjectView(this))

{

ui->setupUi(this);

// 设置项目视图

setCentralWidget(projectView);

// 连接信号和槽

connect(ui->loginButton, &QPushButton::clicked, this, &MainWindow::on_loginButton_clicked);

connect(projectView, &ProjectView::itemClicked, this, &MainWindow::on_projectListView_clicked);

}

MainWindow::~MainWindow()

{

delete ui;

delete projectController;

delete projectView;

}

void MainWindow::on_loginButton_clicked() 

{

QString username = ui->usernameLineEdit->text();

QString password = ui->passwordLineEdit->text();

if (projectController->login(username, password))

{

QMessageBox::information(this, "登录成功", "欢迎使用毕业设计选题管理系统!");

// 加载选题列表

projectView->setModel(projectController->getProjectModel());

}

else 

{

QMessageBox::warning(this, "登录失败", "用户名或密码错误,请重试。");

}

}

// ... (此处省略后续代码,如需继续请告知)

5. mainwindow.cpp 

cpp复制代码

// 继续 mainwindow.cpp

void MainWindow::on_projectListView_clicked(const QModelIndex &index) 

{

if (!index.isValid())

return;

QVariant projectData = index.data(ProjectModel::ProjectRole);

// 假设 projectData 是一个包含项目详情的 QVariantMap

QVariantMap projectDetails = projectData.toMap();

// 显示项目详情(这里只是简单地在消息框中显示)

QString details = QString("项目名称: %1\n导师: %2\n描述: %3")

.arg(projectDetails["name"].toString())

.arg(projectDetails["supervisor"].toString())

.arg(projectDetails["description"].toString());

QMessageBox::information(this, "项目详情", details);

// 分配项目(这里只是模拟分配,实际可能需要更多逻辑)

QString studentName = ui->studentLineEdit->text();

if (!studentName.isEmpty())

{

projectController->assignProject(index.row(), studentName);

QMessageBox::information(this, "分配成功", "项目已成功分配给学生!");

}

else 

{

QMessageBox::warning(this, "分配失败", "请输入学生姓名!");

}

}

6. projectmodel.h

cpp复制代码

#ifndef PROJECTMODEL_H

#define PROJECTMODEL_H

#include <QAbstractTableModel> 

#include <QVariantMap> 

#include <QList> 

class ProjectModel : public QAbstractTableModel

{

Q_OBJECT

public:

enum ProjectRoles {

ProjectRole = Qt::UserRole + 1,

};

explicit ProjectModel(QObject *parent = nullptr);

int rowCount(const QModelIndex &parent = QModelIndex()) const override;

int columnCount(const QModelIndex &parent = QModelIndex()) const override;

QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;

QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;

void addProject(const QVariantMap &project);

QList<QVariantMap> getProjects() const;

private:

QList<QVariantMap> projects;

};

#endif // PROJECTMODEL_H

7. projectmodel.cpp

cpp复制代码

#include "projectmodel.h" 

ProjectModel::ProjectModel(QObject *parent)

: QAbstractTableModel(parent)

{

}

int ProjectModel::rowCount(const QModelIndex &parent) const 

{

Q_UNUSED(parent);

return projects.count();

}

int ProjectModel::columnCount(const QModelIndex &parent) const 

{

Q_UNUSED(parent);

return 3; // 假设我们有3列:项目名称、导师、描述

}

QVariant ProjectModel::data(const QModelIndex &index, int role) const 

{

if (!index.isValid() || role != Qt::DisplayRole)

return QVariant();

const QVariantMap &project = projects[index.row()];

if (index.column() == 0)

return project["name"];

else if (index.column() == 1)

return project["supervisor"];

else if (index.column() == 2)

return project["description"];

return QVariant();

}

QVariant ProjectModel::headerData(int section, Qt::Orientation orientation, int role) const 

{

if (role != Qt::DisplayRole)

return QVariant();

if (orientation == Qt::Horizontal) {

switch (section) {

case 0: return "项目名称";

case 1: return "导师";

case 2: return "描述";

default: return QVariant();

}

}

return QVariant();

}

void ProjectModel::addProject(const QVariantMap &project) 

{

beginInsertRows(QModelIndex(), rowCount(), rowCount());

projects.append(project);

endInsertRows();

}

QList<QVariantMap> ProjectModel::getProjects() const 

{

return projects;

}

8. projectview.h

cpp复制代码

#ifndef PROJECTVIEW_H

#define PROJECTVIEW_H

#include <QTableView> 

class ProjectView : public QTableView

{

Q_OBJECT

public:

explicit ProjectView(QWidget *parent = nullptr);

signals:

void itemClicked(const QModelIndex &index);

protected:

void mousePressEvent(QMouseEvent *event) override;

};

#endif // PROJECTVIEW_H

9. projectview.cpp

cpp复制代码

#include "projectview.h" 

#include <QMouseEvent> 

#include <QHeaderView> 

ProjectView::ProjectView(QWidget *parent)

: QTableView(parent)

{

setMouseTracking(true); // 启用鼠标跟踪以捕获点击事件,即使在没有按下按钮的情况下

verticalHeader()->hide(); // 隐藏垂直表头

setSelectionBehavior(QAbstractItemView::SelectRows); // 设置选择行为为选择整行

setSelectionMode(QAbstractItemView::SingleSelection); // 设置选择模式为单选

}

void ProjectView::mousePressEvent(QMouseEvent *event) 

{

QTableView::mousePressEvent(event);

QModelIndex index = indexAt(event->pos());

if (index.isValid())

emit itemClicked(index);

}

10. projectcontroller.h

cpp复制代码

#ifndef PROJECTCONTROLLER_H

#define PROJECTCONTROLLER_H

#include <QObject> 

#include "models/projectmodel.h" 

#include <QString> 

#include <QVariantMap> 

class ProjectController : public QObject

{

Q_OBJECT

public:

explicit ProjectController(QObject *parent = nullptr);

bool login(const QString &username, const QString &password);

ProjectModel *getProjectModel();

void assignProject(int rowIndex, const QString &studentName);

private:

ProjectModel *projectModel;

bool isLoggedIn;

QString adminUsername;

QString adminPassword;

void initializeProjects();

};

#endif // PROJECTCONTROLLER_H

11. projectcontroller.cpp

cpp复制代码

#include "projectcontroller.h" 

#include <QVariantMap> 

ProjectController::ProjectController(QObject *parent)

: QObject(parent)

, projectModel(new ProjectModel(this))

, isLoggedIn(false)

, adminUsername("admin")

, adminPassword("password")

{

initializeProjects();

}

bool ProjectController::login(const QString &username, const QString &password) 

{

if (username == adminUsername && password == adminPassword) {

isLoggedIn = true;

return true;

}

return false;

}

ProjectModel *ProjectController::getProjectModel() 

{

return projectModel;

}

void ProjectController::assignProject(int rowIndex, const QString &studentName) 

{

if (!isLoggedIn)

return;

QList<QVariantMap> projects = projectModel->getProjects();

if (rowIndex >= 0 && rowIndex < projects.count()) {

QVariantMap &project = projects[rowIndex];

project["assignedTo"] = studentName;

// 注意:这里只是修改了内存中的数据,实际应用中可能需要保存到数据库

}

}

void ProjectController::initializeProjects() 

{

QVariantMap project1;

project1["name"] = "项目一";

project1["supervisor"] = "导师A";

project1["description"] = "这是项目一的描述。";

projectModel->addProject(project1);

QVariantMap project2;

project2["name"] = "项目二";

project2["supervisor"] = "导师B";

project2["description"] = "这是项目二的描述。";

projectModel->addProject(project2);

// 可以继续添加更多项目...

}

以上代码提供了一个简单的毕业设计选题管理系统的基本框架。

【结语】

最后祝看到最后的伙伴们都能上岸!!

【往期回顾】

25工作招聘综合面试全攻略最常见面试问题100题总结心得可用于国企私企合资企业工作招聘面试+适合各种机械电气计算机新闻农学等理科文科工科不同专业学生面试准备-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/m0_72216164/article/details/142469179?spm=1001.2014.3001.5502

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值