kizumi_header_banner_img

Learn. Build. Share.

加载中

文章导读

基于脚手架微服务的视频点播系统-界面布局部分(二)_用户界面及系统管理界面布局


avatar
xiu114514 2025年9月10日 39
基于脚手架微服务的视频点播系统-界面布局部分(二)_用户界面及系统管理界面布局

@TOC 我们先来看下本文结束后需要完成的界面: 1.用户界面: 用户界面 2.修改个人信息界面 修改个人信息界面 3.上传视频界面 上传视频界面 4.系统管理界面-视频审核与角色管理 视频审核 角色管理 5.登录注册界面 登录注册界面

一.用户界面布局

1.1用户界面布局分析与实现

当用户点击"我的"页面切换按钮时,就会显示我的页面。仔细观察发现,我的页面整体属于上下结构布局,从上往下依次为:基本信息区、我的视频区、视频信息显⽰区,每个视频信息框可以复用VideoBox。 用户界面 所以我们可以新增一个ui设计师类,类名为ModifyMyselfDialog然后在其ui界面进行布局如下: 在这里插入图片描述 界面控件嵌套关系如下: 在这里插入图片描述 在这里插入图片描述 和前文一样,详细的布局信息以及qss样式代码可以在本项目更新完毕之后的最后一篇博客置顶获取源码进行参考,这里我们就不罗列了为了避免文章长度冗余。

1.2更新用户图像按钮及逻辑

首先我的界面不会出现关注按钮,所以这里我们需要先隐藏掉:

然后当用户鼠标放到头像位置时会有如下效果,点击之后会弹出对话框让用户选择图片去设置头像: 在这里插入图片描述 在这里插入图片描述 显然QPushButton无法解决此问题,此时我们就需要自定义一个类继承自QPushButton来实现此效果。我们新建一个普通类名为AvatarButton,函数头文件与cpp文件详情实现如下:

hover效果的显示就是一个简单的widget遮罩很简单上面代码已经很详细了。但是注意到我们这里有loadFileToByteArray与makeCircleIcon函数,为什么呢,因为用户在上传头像时,我们不仅仅需要将头像文件上传至服务器,而且它选择的图片不一定是60*60大小的,同时我们的图片还是圆形,所以这里我们就需要对用户上传的头像文件先转化为二进制流同时对该图像进行裁剪:

打开myselfwidget.ui,选中avatarBtn按钮,将类型提升为AvatarButton,运⾏程序就能看到更新图像按钮的效果。那么此时就可以在我的界面设置头像了。

1.3修改按钮及逻辑

当用户点击修改按钮后,能够弹出修改对话框,用户可以对自己的昵称、密码信息进⾏修改。添加⼀个设计师界⾯,类名称设置为ModifyMyselfDialog然后我们在ui界面布局如下: 在这里插入图片描述 控件嵌套关系如下: 在这里插入图片描述 alt+shift+r即可看到如下预览界面: 在这里插入图片描述 给我的⻚⾯中的settingBtn按钮绑定槽函数,然后在槽函数中显⽰ModifyMyselfDialog对话框。注意ModifyMyselfDialog需要继承⾃QDialog,并设置去掉边框。

因为弹出修改个⼈资料对话框之后,点击设置密码按钮,会弹出设计密码对话框,让⽤⼾完成密码修改。这里我们需要新建一个ui设计师类名为NewPasswordDialog,在其ui文件中布局如下: 在这里插入图片描述 控件的嵌套关系如下: 在这里插入图片描述 当用户点击修改密码时,就能显⽰出修改密码对话框。上面的showPasswordDlg就是用来控制其显示的函数。但是⽤⼾在修改密码时,密码是有限制的:密码由数字、⼤写英⽂字⺟、⼩写英⽂字⺟、特殊字符组成,至少包含两种类型,⻓度要求8-16位字符。因此当用户前后两次密码输⼊完成之后,需要验证是否满足密码限制,以及前后两次输⼊的密码是否相等。所以我们可以这样设计NewPasswordDialog类:

1.4上传视频对话框实现逻辑

视频信息对话框中元素整体为上下结构,因为界⾯中元素较多,页面中显示不下,因此界⾯中所有元 素都处于QScrollArea中,界⾯结构⼤致如下: 在这里插入图片描述 那么接下来我们就新建一个ui设计师类名为UploadVideoPage,然后在其ui界面中进行布局: 在这里插入图片描述 控件嵌套关系如下: 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 布局完毕并设置完样式后,预览下就能看到如下画面: 在这里插入图片描述

1.4.1页面跳转逻辑处理

由于上传视频页面和首页、我的页面在相同位置显示,因此需要再LimePlayer的stackedWidget中添加⼀个新页面,objectName修改为uploadVideo,然后将其类型提升为UploadVideoPage。 当用户点击我的页面中上传视频按钮,并且选择了需要上传的视频时,我的页面会发送⼀个jumpToMyPage(ButtonType buttontype)信号,由LimePlayer处理该信号将页面切换到上传视频页面,当用户填好视频信息点击提交按钮时再跳回我的页面:

1.4.2页面控件响应处理

标题框和简介框的⽂本有字数限制,随着用户不断输⼊,要能让用户看到还剩余多少字可以输⼊。因此需要捕获标题QLineEdit和简介QPlainTextEdit的QLineEdit::textChanged信号,在绑定的槽函数中实现剩余字数提示功能。

视频封⾯图默认使用视频首帧,如果用户想要更换视频⾸⻚封⾯图时,可以点击更改封⾯图按钮,从磁盘选择本地图⽚作为视频封⾯图,注意图⽚宽⾼⽐为4:3:

标签和分类后序在进行处理。

二.系统界面布局

当点击主页中系统管理页面切换按钮时,应切换到系统管理⻚⾯。系统管理⻚⽀持两个页面:审核管理和⻆⾊管理。审核管理页面中系统管理员对⽤⼾上传的视频进⾏审核、上架和下架处理,⻆⾊管理页面主要是新增、编辑管理员信息,启⽤和禁⽌管理员账号等。 仔细观察我们刚开始给出的系统管理页面的显示,页面中仅仅的数据展示操作区不同外,其余基本是⼀样的,因此在界⾯设计时可以考虑将公共部分提取出来作为基类,然后让审核管理和⻆⾊管理⻚⾯去继承该基类可以重复代码冗余。但是qt designer设计的ui界⾯本⾝不⽀持继承,想要达到继承复用减少代码冗余,审核管理和⻆⾊管理操作和展⽰部分可以⽤纯代码方式实现。

2.1系统管理页框架

新建⼀个qt设计师界面,命名为AdminWidget,然后我们在其ui设计师界面进行布局如下: 在这里插入图片描述 控件嵌套关系如下: 在这里插入图片描述 审核管理和⻆⾊管理页面实现完后,将container中checkTable和roleTable的类型替换掉,系统管理页面就完成了。(他俩初始是个QWidget)。

2.2审核管理页

审核页面整体为上下结构,从上往下依次为编辑选择按钮区,视频信息显示区和分页器区域,编辑选择按钮区域中用户可以进⾏条件查询等,视频信息展示区主要展⽰各视频信息,每条展示视频信息的控件需要用户⾃定义;如果⼀个视频比较多页面展示不下时,可以通过分页器向前向后翻页或快速定位指定区域,因此分页器也需要用户⾃定义。 那我们先来实现审核管理页吧,添加⼀个设计师界⾯,命名为CheckTable,然后在ui界面进行布局如下: 在这里插入图片描述 其控件嵌套关系如下: 在这里插入图片描述 在这里插入图片描述

设置完成后点击adminwidget.ui,将checkTable的类型提升为CheckTable。运行程序之后就有最开始展示的效果了(当然此时界面中没有任何条目)。 在审核管理页面,管理员通过用户id查看用户上传的视频,也可以根据视频状态查看该状态下的视频。用户id只能是大于0的整数,因此需要对用户ID编辑框进行条件限制。当然当⽤⼾点击重置和查看按钮后,按钮也需要响应对应的操作。

2.3角色管理页

⻆⾊管理页面和审核页面布局形式几乎相同,直接参考审核⻚⾯布局基本可以完成角色页面布局,添加⼀个设计师界⾯,命名为RoleTable然后在其ui界面中进行布局: 在这里插入图片描述 其控件嵌套关系如下: 在这里插入图片描述 在这里插入图片描述 设置完成之后,打开adminWidget.ui,将roleTable的类型提升为RoleTable。在⻆⾊管理页面,管理员通过用户⼿机号查看用户信息,因此⼿机号编辑框需要进行输入限制。此外管理员也可以根据用户状态查看该状态下的所有用户信息,因此用户状态的初始数据需要提前设置好。此外重置和审核按钮点击时,也需要处理相应的逻辑:

2.4审核和角色管理页面切换

当用户点击审核管理和角色管理按钮时,页面需要在审核管理页和角色管理页之间切换。实现原理⾮常简单,就直接切换stackedWidget界面即可。

2.5视频审核表项

添加⼀个Qt设计师界⾯,命名为CheckTableItem然后在其ui界面中进行布局: 在这里插入图片描述 控件嵌套关系如下: 在这里插入图片描述 此时我们在checktable中添加更新函数就能有文章刚开始展示的效果了:

2.6角色管理表项

添加⼀个Qt设计师界面,命名为RoleTableItem,然后在其ui文件中进行布局如下: 在这里插入图片描述 控件嵌套关系如下: 在这里插入图片描述 然后我们像checkTable那样给他设置几个到界面中就能有开头展示的效果了:

2.7编辑用户信息页

在角色管理界⾯中,当管理员点击新增按钮时,需要弹出新增管理员信息窗口,完成新增加管理员信息的输入;当点击编辑按钮时,需要弹出编辑管理员信息窗口,完成对所选管理员信息的编辑。但仔细观察,这两个页面实际是完全相同的。 在这里插入图片描述 在这里插入图片描述 注意,新增和编辑用户信息窗口并不是上面白色窗口区域,而是整个窗口区域,窗口上覆盖⼀个遮罩层,用户编辑信息区域在遮罩层上,这样编辑信息区域能更清晰突显出来。该窗口也采用绝对定位的⽅式进行布局。这里我们添加⼀个Qt设计师界⾯,命名为EditUserDialog,然后在其ui文件中进行布局: 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 EditUserDialog创建是⼀个模态对话框,并且能够在外部设置创建新增对话框,还是编辑对话框。同时我们设置正则表达式限制输入框中的输入

在RoleTable中给新增按钮添加槽函数,在槽函数中显示EditUserDialog窗口;同理,在RoleTableItem中给编辑按钮添加槽函数,当编辑按钮点击的时候显⽰EditUserDialog窗口。

但是此时有一个问题虽然窗口能够显示出来了,但是位置不对,为了更方便之后的获取主窗口的位置,同时确保同一个程序中只有一个limePlayer实例,这里我们将limePlayer设置为单例模式:

此时我们在edituserdialog.cpp设置其初始位置即可:

这时侯位置显示就没问题了。

2.8分页器实现

当数据量比较⼤时,如果将数据⼀次性加载出来会非常耗时,而且也不⽅便用户查看,因此都是分页显示,用户通过分页器可以快速定位到指定页面查看数据: 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 假设:page为当前显示页,pageCount为总页数,而默认显示的pageButton数为7个,要实现上述分页器需求,则: ① 当点击"<"按钮时,显示前一页,当点击">"按钮时显示最后一页 ② 当在跳转⾄框中输入数字后按回⻋键可直接跳转⾄指定页,数字在1至最大页数之间;若输入超过最大页数则跳转到最后页
③ 如果总页数小于7⻚,中间部分按钮上显示1~7页数,不出现折叠按钮,page按钮为激活按钮 ④ 如果总页数⼤于7⻚,当前显显示页为1-5时,前5个按钮展示1~5页,第6按钮为折叠按钮显示 为"…",最后⼀个按纽显示总页数,page按钮为激活按钮 ⑤ 如果总页数⼤于7页,当前显⽰页为pageCount-4 ~ pageCount时(pageCount为总⻚数),第⼀个按钮显示第1页,其余按钮显示pageCount-3 ~ pageCount页,第2个按钮为折叠按钮显示…,page按纽为折叠按钮 ⑥ 如果总页数⼤于7页,当前显⽰⻚⼤于5,小于pageCount-4时,第1个按钮和第7个按钮固定展示第⼀页和最后⼀页,中间五个按钮⼀次为page-2、page-1,page,page+1,page+2,并且将第2个按 钮和第6个按钮为折叠按钮显⽰…,最中间按钮(即第三个按钮)为激活按钮。

弄清分页器的逻辑之后,我们便可以着手开始分页器的设计了: 由于分页器上每个按钮有特定样式,并且有些折叠显示,有些显示页数,有些处于点击选中状态,因此将QPushButton进⾏简单封装。添加⼀个C++头⽂件和源⽂件,类名为PageButton,继承自QPushButton。具体实现如下:

然后我们添加一个Paginator设计师类,这里我们不借助ui界面进行布局了,换一种方式尝试我们直接在代码中进行控件的创建与布局,同时基于我们上面对分页器逻辑的分析,我们可以这样实现Paginator类:

在审核页面和角色管理页面都有分页器,在这两个窗口中添加并显示分⻚器。

三.登录界面布局

刚开始用户为临时用户,临时用户操作有限,只能观看视频等,如果要发送弹幕、视频点赞等操作,必须先要登录进系统中,因此需要添加⼀个登录页面。⽀持两种登录⽅式:密码登录 和 短信登录。那我们可以新建一个设计师类类名为Login然后在其ui文件中进行布局: 在这里插入图片描述 界面中控件的嵌套关系如下: 在这里插入图片描述 当然因为登录窗口是一个弹窗,我们可以去让他继承自QDialog,但是我们这里换一种写法,同时设置输入限制和密码登录与短信登录界面切换的逻辑,实现如下:

这里为了测试,我们为playerPage界面的点赞按钮设置点击后弹出此对话框:

在视频播放界面点击点赞按钮就有如下效果了: 在这里插入图片描述

四.toast窗口

Toast提示是⼀种用来进行关键信息提示的弹出式消息对话框,⼀般只显示几秒钟,然后⾃动消失不会干扰用户的正常操作。通常用于通知用户某些操作结果、错误或状态提示的弹出式消息框。最初在 Android 系统中被广泛使用,后来也被许多其他平台和应用程序借鉴。 界面上有些操作需要用户登录之后才有权限,比如发送弹幕、点赞、修改⽤⼾图像等,在用户没有登录时进行这些操作,应该给用户Toast提示。 我们对上面的onLikeImageBtnClicked函数中的Toast::showToast("登录之后才可以点赞哦~",login);取消注释后点击点赞按钮会先显示toast窗口然后再弹出登录界面,显示效果如下: 在这里插入图片描述 这里我们新建一个普通c++类类名为Toast,实现toast窗口的代码如下:



评论(已关闭)

评论已关闭

日历

2025 年 9 月
 1
2345678
9101112131415
16171819202122
23242526272829
3031