基于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.rhkb.cn/news/263240.html

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

相关文章

EasyRecovery破解版补丁免费钥匙下载

说起数据恢复软件&#xff0c;相信没有小伙伴不知道EasyRecovery这个软件吧&#xff0c;该软件具有快捷、高效、便捷的特点&#xff0c;且提供的功能也非常全面&#xff0c;不仅可以恢复各样被删除的文件、视频、图片等&#xff0c;还可以支持SD卡数据恢复&#xff0c;TF卡等各…

面试经典150题——生命游戏

​"Push yourself, because no one else is going to do it for you." - Unknown 1. 题目描述 2. 题目分析与解析 2.1 思路一——暴力求解 之所以先暴力求解&#xff0c;是因为我开始也没什么更好的思路&#xff0c;所以就先写一种解决方案&#xff0c;没准写着写…

istio系列教程

istio学习记录——安装https://suxueit.com/article_detail/otVbfI0BWZdDRfKqvP3Gistio学习记录——体验bookinfo及可视化观测https://suxueit.com/article_detail/o9VdfI0BWZdDRfKqlv0r istio学习记录——kiali介绍https://suxueit.com/article_detail/pNVbfY0BWZdDRfKqX_0K …

VBA实现快速逆透视

实例需求&#xff1a;将工作表中的数据&#xff08;多维度交叉&#xff09;&#xff0c;对日期进行逆透视&#xff0c;转换为下表的格式。 示例代码如下。 Sub UnpivotTable()Dim oSht As WorksheetDim inLastRow As Long, inLastCol As LongDim outLastRow As Long, outCol …

橘子学es原理01之准备工作

es本身是具备很好的使用特性的&#xff0c;我指的是他的部署方面的&#xff0c;至于后期的使用和运维那还是很一眼难尽的。 我们从这一篇开始就着重于es的一些原理性的的一些探讨&#xff0c;当然我们也会有一些操作性的&#xff0c;业务性的会分为多个栏目来写。比如前面我写的…

ES6内置对象 - Map

Map&#xff08;Map对象保存键值对&#xff0c;键值均不限制类型&#xff09; 特点&#xff1a; 有序&#xff08;Set集合是无序的&#xff09;&#xff1b;键值对&#xff08;键可以是任意类型&#xff09;&#xff1b;键名不能重复&#xff08;如果重复&#xff0c;则覆盖&…

Git的基本操作和原理

目录 写在前面的话 为什么要有Git&#xff08;git初识&#xff09;&#xff1f; Git安装(Centos为例) Git基本操作 创建Git本地仓库 Git配置 认识工作区、暂存区、版本库 概念认识 添加文件 查看.git文件 修改文件 版本回退 撤销修改 情况一&#xff1a;…

UnityWebGL 设置全屏

这是Unity导出Web默认打开的页面尺寸 修改后效果 修改 index.html 文件 1.div元素的id属性值为"unity-container"&#xff0c;宽度和高度都设置为100%&#xff0c;意味着该div元素将占据整个父容器的空间。canvas元素的id属性值为"unity-canvas"&#xff…

Code-Audit(代码审计)习题记录6-7

介绍&#xff1a; 自己懒得搭建靶场了&#xff0c;靶场地址是 GitHub - CHYbeta/Code-Audit-Challenges: Code-Audit-Challenges为了方便在公网练习&#xff0c;可以随地访问&#xff0c;本文所有的题目均来源于网站HSCSEC-Code Audit 6、习题6 题目内容如下&#xff1a; 源代…

Autoencoder深度学习中的无监督学习神经网络

在当今的深度学习领域中&#xff0c;自动编码器&#xff08;Autoencoder&#xff09;是一种常见的无监督学习神经网络模型&#xff0c;用于学习有效的数据表示。自动编码器在许多领域都有广泛的应用&#xff0c;包括特征提取、降维、图像去噪、生成模型等。 自动编码器的基本原…

Redis篇之缓存雪崩、击穿、穿透详解

学习材料&#xff1a;https://xiaolincoding.com/redis/cluster/cache_problem.html 缓存雪崩 什么是缓存雪崩 在面对业务量较大的查询场景时&#xff0c;会把数据库中的数据缓存至redis中&#xff0c;避免大量的读写请求同时访问mysql客户端导致系统崩溃。这种情况下&#x…

Linux运维-Web服务器的配置与管理(PHP)

Web服务器的配置与管理(PHP) 项目场景 某企业在CentOS上搭建Web服务系统&#xff0c;以PHP作为网页开发环境&#xff0c;以MySQL为后台数据库。 基础知识 PHP PHP原始为Personal Home Page的缩写&#xff0c;已经正式更名为 “PHP: Hypertext Preprocessor”&#xff08;超…

持续集成,持续交付和持续部署的概念,以及GitLab CI / CD的介绍

引言&#xff1a;上一期我们部署好了gitlab极狐网页版&#xff0c;今天我们介绍一下GitLabCI / CD 目录 一、为什么要 CI / CD 方法 1、持续集成 2、持续交付 3、持续部署 二、GitLab CI / CD简介 三、GitLab CI / CD 的工作原理 4、基本CI / CD工作流程 5、首次设置 …

Unity之PUN2插件实现多人联机射击游戏

目录 &#x1f4d6;一、准备工作 &#x1f4fa;二、UI界面处理 &#x1f4f1;2.1 登录UI并连接PUN2服务器 &#x1f4f1;2.2 游戏大厅界面UI &#x1f4f1;2.3 创建房间UI &#x1f4f1;2.4 进入房间UI &#x1f4f1;2.5 玩家准备状态 &#x1f4f1;2.6 加载战斗场景…

AI时代显卡如何选择,B100、H200、L40S、A100、H100、V100 含架构技术和性能对比

AI时代显卡如何选择&#xff0c;B100、H200、L40S、A100、H100、V100 含架构技术和性能对比。 英伟达系列显卡大解析B100、H200、L40S、A100、A800、H100、H800、V100如何选择&#xff0c;含架构技术和性能对比带你解决疑惑。 近期&#xff0c;AIGC领域呈现出一片繁荣景象&a…

ESP8266智能家居(4)——开发APP基础篇

1.前期准备 安装好Android studio 开发环境 准备一台完好的安卓手机 手机要处于开发者模式 设置 --->关于手机---> 一直点击版本号 &#xff08;不同手机进入开发者模式的步骤可能不太一样&#xff09; 进入开发者模式后&#xff0c;找到辅助功能&#xff0c;打开开…

字符函数和字符串函数(C语言进阶)(一)

前言 C语言中对字符和字符串的处理是很频繁的&#xff0c;但是c语言本身是没有字符串类型的&#xff0c;字符串通常放在常量字符串中或着字符数组中。 字符串常量适用于哪些对它不做修改的字符串函数。 1、函数介绍 1.1 strlen strlen&#xff1a;计算字符串长度 看一个代码&…

​LeetCode解法汇总2583. 二叉树中的第 K 大层和

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 给你一棵二叉树的根节点 root 和一个正整…

编译GreatSQL with RocksDB引擎

GreatSQL里也能用上RocksDB引擎 1. 前言 RocksDB 是基于Facebook 开源的一种支持事务的、高度可压缩、高性能的MyRocks存储引擎&#xff0c;特别适用于高度压缩和大容量的数据。以下是一些关键特点&#xff1a; 高性能&#xff1a; LSM 树结构使得RocksDB在写入密集型负载下表现…

Qt 事件

1. 事件 事件是对各种应用程序需要知道的由应用程序内部或者外部产生的事情或者动作的通称。在Qt中使用一个对象来表示一个事件&#xff0c;它继承自QEvent类。 2. 事件和信号 事件与信号并不相同&#xff0c;比如我们使用鼠标点击了一下界面上的按钮&#xff0c;那么就会产生…