基于qt的图书管理系统----03核心界面设计

参考b站:视频连接

源码github:github

目录

  • 1 添加软件图标
  • 2 打包程序
  • 3 三个管理界面设计
  • 4 代码编写
    • 4.1 加载界面
    • 4.2 点击按钮切换界面
    • 4.3 组团添加样式
    • 4.4 搭建表头
    • 4.5 表格相关操作

从别人那里下载的项目会有这个文件,里边是别人配置的路径,使用时需要删除,打开qt重新构建项目即可使用

在这里插入图片描述

1 添加软件图标

exe的图标得是iso格式的,所以得转换,可以使用这个网址 https://cn.office-converter.com/ico-converter。

首先在bookmg.pro配置文件添加上这一句RC_FILE = $$PWD/res/app.rc(把apprc的目录放入,因为我们修改过目录),把图标放到res里边,同时新建一个app.rc的文件,在里边写上IDI_ICON1 ICON "logo.ico",构建程序

在这里插入图片描述

2 打包程序

找到qt安装位置的这个目录 E:\VS2022\VSQT\6.4.3\mingw_64\bin 打开cmd输入win,talbe键补全,把你bin下要打包的exe拖入cmd,回车执行。此时双击exe还是不能打开软件,缺少一些库,需要手动拷贝,见下图。拷贝完成后双击就能打开

在这里插入图片描述在这里插入图片描述

进入两个ui界面,把windowtitle改了,一个登陆一个主程序。

3 三个管理界面设计

新建qt设计师界面-widget,使用tableView,按照下图搭建界面

在这里插入图片描述

图书管理界面

在这里插入图片描述

借阅记录界面

在这里插入图片描述

4 代码编写

4.1 加载界面

在main里新增一个initPage的函数,同时在构造函数里调用他。初始化三个页面的指针并且都置空,随后创建对象,将三个页面放入stackwidget

#define CELL_MAIN_H#include <QMainWindow>
#include "cell_bookmanger.h"  // 图书管理类头文件
#include "cell_usermange.h"   // 用户管理类头文件
#include "cell_recordmange.h" // 记录管理类头文件// Qt 命名空间开始
QT_BEGIN_NAMESPACE
namespace Ui {
class Cell_Main;
}
QT_END_NAMESPACE// 主窗口类,继承 QMainWindow
class Cell_Main : public QMainWindow
{Q_OBJECTpublic:// 构造函数,可选父窗口Cell_Main(QWidget *parent = nullptr);// 析构函数~Cell_Main();// 初始化页面void initPage();private:// UI 界面指针Ui::Cell_Main *ui;// 图书管理页面指针Cell_BookManger * m_bookpage;// 用户管理页面指针Cell_Usermange * m_userpage;// 记录管理页面指针Cell_RecordMange * m_recordpage;};#endif // CELL_MAIN_H

Main.cpp

#include "cell_main.h"
#include "ui_cell_main.h"Cell_Main::Cell_Main(QWidget *parent): QMainWindow(parent), ui(new Ui::Cell_Main), m_bookpage(nullptr), m_userpage(nullptr), m_recordpage(nullptr)
{ui->setupUi(this); // 设置 UI 界面initPage();
}Cell_Main::~Cell_Main()
{delete ui;
}void Cell_Main::initPage()
{// 创建用户管理、图书管理、记录管理页面对象m_userpage = new Cell_Usermange(this);m_bookpage = new Cell_BookManger(this);m_recordpage = new Cell_RecordMange(this);// 将页面添加到层叠窗口部件中ui->stackedWidget->addWidget(m_userpage);ui->stackedWidget->addWidget(m_bookpage);ui->stackedWidget->addWidget(m_recordpage);// 设置初始显示第一个页面(用户管理)ui->stackedWidget->setCurrentIndex(0);
}

4.2 点击按钮切换界面

首先让这些按钮互斥,每次只能一个是选中的状态,第一种方法进入ui界面,选中四个按钮,右键分配给按钮组直接实现
在这里插入图片描述

随后使用一个循环,实现点击时切换界面,判断按钮的名称来切换页面

// 初始化页面函数实现
void Cell_Main::initPage()
{// 创建用户管理、图书管理、记录管理页面对象m_userpage = new Cell_Usermange(this);m_bookpage = new Cell_BookManger(this);m_recordpage = new Cell_RecordMange(this);// 将页面添加到层叠窗口部件中ui->stackedWidget->addWidget(m_userpage);ui->stackedWidget->addWidget(m_bookpage);ui->stackedWidget->addWidget(m_recordpage);// 设置初始显示第一个页面(用户管理)ui->stackedWidget->setCurrentIndex(0);// 获取工具栏所有按钮auto l = ui->tool->children();// 遍历所有按钮for (auto it : l) {// 判断是否是按钮if (it->objectName().contains("btn")) {// 将按钮转换为 QPushButton 类型QPushButton *btn = static_cast<QPushButton *>(it);// 连接按钮点击事件与槽函数connect(btn, &QPushButton::clicked, this, &Cell_Main::dealMenu);}}
}// 处理菜单栏按钮点击事件函数实现
void Cell_Main::dealMenu()
{//调试显示按钮名称qDebug()<<sender()->objectName();// 获取发送信号的按钮对象QPushButton *btn = static_cast<QPushButton *>(sender());// 获取按钮对象名称auto str = btn->objectName();// 根据按钮名称判断要显示的页面do {if (str == "btn_user") {// 显示用户管理页面ui->stackedWidget->setCurrentIndex(0);break;} else if (str == "btn_book") {// 显示图书管理页面ui->stackedWidget->setCurrentIndex(1);break;} else if (str == "btn_record") {// 显示记录管理页面ui->stackedWidget->setCurrentIndex(2);break;}} while (true);
}

4.3 组团添加样式

对于每个页面,选中控件点击绿色+号-字符串,对于每个页面的按钮输入btn来统一命名,随后可以在main.ui统一修改他们的样式

在这里插入图片描述

在mian.ui的cell_main中添加样式

在这里插入图片描述

QPushButton[name = "btn"]{border-radius:4px;background: #409eff; color:white;font -size:14px;min-height: 28px; min-width: 76px;padding:4px}QLabel[name="title"]{font:30px '黑体';}
QLabel[name="lb"]{font:14px '楷体';}
QLineEdit[name = "le"]{border-radius:4px;min-height:28px;min-width:280px; max-width :280px; border:1px solid black}

4.4 搭建表头

实现了用户管理子窗口的基本功能,包括显示用户列表、添加用户等。

#ifndef CELL_USERMANGE_H
#define CELL_USERMANGE_H#include <QWidget>
#include <QStandardItemModel>// 命名空间声明
namespace Ui {
class Cell_Usermange;
}// Cell_Usermange 类声明
class Cell_Usermange : public QWidget
{Q_OBJECTpublic:// 构造函数,接受父窗口指针作为参数explicit Cell_Usermange(QWidget *parent = nullptr);// 析构函数~Cell_Usermange() override;private:// UI 界面指针Ui::Cell_Usermange *ui;// 用户信息数据模型QStandardItemModel m_model;
};#endif // CELL_USERMANGE_H

User.cpp

#include "cell_usermange.h"
#include "ui_cell_usermange.h"// Cell_Usermange 类构造函数实现
Cell_Usermange::Cell_Usermange(QWidget *parent): QWidget(parent), ui(new Ui::Cell_Usermange)
{// 设置 UI 界面ui->setupUi(this);// 将数据模型与表格视图关联ui->tableView->setModel(&m_model);// 设置表格列头标签m_model.setHorizontalHeaderLabels(QStringList{"用户ID", "姓名", "年级", "所属学院", "权限", "用户名", "密码"});// 创建一行示例用户数据QList<QStandardItem *> items;items.append(new QStandardItem("1"));items.append(new QStandardItem("小明"));items.append(new QStandardItem("1年1班"));items.append(new QStandardItem("机械学院"));items.append(new QStandardItem("学生"));items.append(new QStandardItem("xiaoming"));items.append(new QStandardItem("123456"));// 将示例数据添加至模型m_model.appendRow(items);
}// Cell_Usermange 类析构函数实现
Cell_Usermange::~Cell_Usermange()
{// 释放 UI 界面指针delete ui;
}

4.5 表格相关操作

不能修改表格内容,切每次只能选中一行

//不能编辑表格
ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
//每次选中一行
ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/699674.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java核心-核心类与API(2)

话接上回&#xff0c;继续核心类与API的学习&#xff0c;这次介绍StringBuffer/StringBuilder/StringJoiner类。StringBuffer和StringBuilder是我们学习的重点&#xff0c;建议对比学习&#xff0c;做好区分。 一、StringBuffer类 1、概述 1&#xff09;问题 由于 String 类…

直接插入排序+希尔排序+冒泡排序+快速排序+选择排序+堆排序+归并排序+基于统计的排序

插入排序&#xff1a;直接插入排序、希尔排序 交换排序&#xff1a;冒泡排序、快速排序 选择排序&#xff1a;简单选择排序、堆排序 其他&#xff1a;归并排序、基于统计的排序 一、直接插入排序 #include<stdio.h> #include<stdlib.h> /* 直接插入排序&#…

flet 音乐播放组件 audio的几点注意的地方

最近做一个flet的播放器&#xff0c;遇到很多坑。这里记录一下。 audio, 要使用的话&#xff0c;必须放在page.overlay里面才能播放。 audio1 Audio(srcf"{tracks_list[i]}", autoplayFalse)page.overlay.append(audio1)page.update() #更新overlay的内容audio1.p…

Apache Calcite 动态数据管理框架入门介绍

原文地址&#xff1a; Apache Calcite 动态数据管理框架介绍 背景 随着数据规模的不断增长和数据源的多样化&#xff0c;开发人员需要面对各种挑战&#xff0c;如何高效地管理、查询和分析海量数据成为了一个迫切的问题。 在这样的背景下&#xff0c;出现了许多优秀的开源组…

RSA加密原理

2024.2.23 密钥对的生成过程 1、随机找两个质数 P 和 Q &#xff0c;P 与 Q 越大&#xff0c;越安全 本例取 P 67 &#xff0c;Q 71 计算他们的乘积 N P * Q 4757 转化为二进为 1001010010101&#xff0c;该加密算法即为 13 位&#xff0c;实际使用中的算法是往往是 …

前瞻性规划:解决数据中心机房通用性问题

随着技术的快速发展&#xff0c;数据中心机房的建设面临着不断变化的挑战。在机房规划和设计阶段&#xff0c;缺乏对用户需求的深入分析和对未来发展趋势的考量&#xff0c;往往会导致机房通用性不足&#xff0c;从而影响其长期使用效率和稳定性。本文将探讨数据中心机房建设中…

架构设计:缓存技术的应用与挑战

引言 在当今大数据时代&#xff0c;系统性能优化成为了架构设计中的重要一环。在高并发、大流量的应用场景下&#xff0c;如何提高系统的响应速度和吞吐量成为了亟待解决的问题。缓存技术作为一种常见的性能优化手段&#xff0c;能够显著提升系统的性能和稳定性。然而&#xf…

《凤凰架构》-全局事务章节读书笔记

二阶段提交协议&#xff1a; 准备阶段&#xff1a;又叫作投票阶段&#xff0c;在这一阶段&#xff0c;协调者询问事务的所有参与者是否准备好提交&#xff0c;参与者如果已经准备好提交则回复 Prepared&#xff0c;否则回复 Non-Prepared。这里所说的准备操作跟人类语言中通常…

Ansible概述和常用模块

目录 一、ansible概述 &#xff08;一&#xff09;基础知识 &#xff08;二&#xff09;特性 二、部署ansible &#xff08;一&#xff09;管理端安装 &#xff08;二&#xff09;ansible 目录结构 &#xff08;三&#xff09;配置主机清单 &#xff08;四&#xff09;…

Leetcode2583. 二叉树中的第 K 大层和

Every day a Leetcode 题目来源&#xff1a;2583. 二叉树中的第 K 大层和 解法1&#xff1a;层序遍历 排序 先使用层序遍历计算出树的每一层的节点值的和&#xff0c;保存在数组 levelSum 中。然后将数组进行排序&#xff0c;返回第 k 大的值。需要考虑数组长度小于 k 的边…

状态空间模型的离散化方法

介绍 状态空间模型通常是用来描述动态系统随时间变化的数学模型&#xff0c;它由状态方程和观测方程组成。对于连续时间的状态空间模型&#xff0c;我们有时需要将其离散化&#xff0c;以便在数字计算机上进行处理。常见的离散化方法有&#xff1a; 欧拉方法&#xff08;Forw…

【Linux】 yum命令使用

yum命令 yum&#xff08; Yellow dog Updater, Modified&#xff09; 是一个在 Fedora、CentOS 及其它一些基于 RPM 的 Linux 发行版中使用的包管理器。它允许用户自动安装、更新、配置和删除软件包。yum 由 Python 写成&#xff0c;基于 RPM&#xff08;Red Hat Package Mana…

【Mongo】mongodump/mongoexport/mongoimport 操作

一.mongodump 导出/导入 导出 1、进入容器 docker exec -it 容器id bash 2、导出 mongodump -h 127.0.0.1:27017 --authenticationDatabaseadmin -u admin -p xxx --archive/root/data.gz --gzip -d zb -c PUSH_MESSAGE_BACKUP -h 表示 host -d/--db 表示 databa…

EasyRecovery2024永久免费版手机数据恢复软件功能全面介绍

一、功能概述 EasyRecovery手机数据恢复软件是一款专为移动设备设计的数据恢复工具。它能够有效地从智能手机、平板电脑等移动设备中恢复因各种原因丢失的数据&#xff0c;包括但不限于误删除、格式化、系统崩溃、病毒感染等。 EasyRecovery-mac最新版本下载:https://wm.maked…

【Java程序设计】【C00267】基于Springboot的在线考试系统(有论文)

基于Springboot的在线考试系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 本系统是基于Springboot的在线考试系统&#xff1b;本系统主要分为管理员、教师和学生三种角色&#xff1b; 管理员登录系统后&#xff0c;可以对首页&#x…

悄悄话花费的时间(C语言)【二叉树各结点统计求和】

题目描述 给定一个二叉树&#xff0c;每个节点上站着一个人&#xff0c;节点数字表示父节点到该节点传递悄悄话需要花费的时间。 初始时&#xff0c;根节点所在位置的人有一个悄悄话想要传递给其他人&#xff0c;求二叉树所有节点上的人都接收到悄悄话花费的时间。 输入描述 …

前端数据可视化:ECharts使用

可视化介绍 ​  ​  应对现在数据可视化的趋势&#xff0c;越来越多企业需要在很多场景(营销数据&#xff0c;生产数据&#xff0c;用户数据)下使用&#xff0c;可视化图表来展示体现数据&#xff0c;让数据更加直观&#xff0c;数据特点更加突出。   ​  数据可视化主要目…

远程linux机器中使用camera

linux远程桌面访问时&#xff0c; 发现打不开camera&#xff0c; 需要进行下面的操作才能打开 首先查看video设备的权限 ls -la /dev/video0 crw-rw---- 1 root video 81, 0 Jul 22 19:54 /dev/video0这种情况下远程打不开&#xff0c;需添加权限 添加访问的权限&#xff1a…

openssl 生成nginx自签名的证书

1、命令介绍 openssl req命令主要的功能有&#xff0c;生成证书请求文件&#xff0c; 查看验证证书请求文件&#xff0c;还有就是生成自签名证书。 主要参数 主要命令选项&#xff1a; -new :说明生成证书请求文件 -x509 :说明生成自签名证书 -key :指定已…

【大数据】Flink 内存管理(一):设置 Flink 进程内存

Flink 内存管理&#xff08;一&#xff09;&#xff1a;设置 Flink 进程内存 1.配置 Total Memory2.JVM 参数3.根据比例限制的组件&#xff08;Capped Fractionated Components&#xff09; Apache Flink 通过严格控制各种组件的内存使用&#xff0c;在 JVM 上提供高效的工作负…