关键词:
1.视图模型介绍
在Qml中、常见的View视图有:
- ListView: 列表视图,视图中数据来自ListModel、XmlListModel或c++中继承自QAbstractItemModel或QAbstractListModel的自定义模型类
- TableView: 和excel类似的视图
- GridView: 网格视图,类似于home菜单那样,排列着一个个app小图标
- PathView: 路径视图,可以根据用户自定义的path路径来显示不一样的视图效果
- SwipeView: 滑动视图,使用一组页面填充。每次只显示一个页面。用户可以通过横向滑动在页面之间导航,一般会将它与PageIndicator结合使用
本章首先来学习ListView.以微信好友列表为例:
里面的每个好友就是由一个个 item 组成的,存在视图中的model里,然后写一个delegate组件,即可通过ListView显示出来.
由于时间不是很多,所以本章实现的微信好友列表和聊天列表(v1版本)是通过模拟数据实现的,等后面有时间后,再来实现个一个真正的内网聊天工具.
2.demo实现(支持自适应)
好友列表如下图所示:
聊天列表如下图所示:
整个效果如下所示:
觉得GIF模糊的话,可以转弯去bilibilihttps://www.bilibili.com/video/BV1Z64y1R7kL/
由于代码上传CSDN,会导致有些同学可能没积分无法下载,所以已经上传群里了.
如果下载后学习有收获,一定要来这里给我点个赞呀,都没动力更新文章了,赞的人太少了
3.重要组件-实现气泡组件源码
import QtQuick 2.0 import "BubbleNormal.js" as BubbleNormal import "BubbleBlue.js" as BubbleBlue import "BubbleBlack.js" as BubbleBlack Item id: container property var bubbleIndex: 0 property string msgText: "" property bool isSend: true property int iconHeight: 40 property int maxWidth: 100 Canvas id: canvas anchors.fill: parent onPaint: bubble().drawBubble(getContext(\'2d\')); Text id: text text: msgText font.pixelSize: 17 font.family: "Microsoft Yahei" wrapMode: Text.WrapAnywhere horizontalAlignment: Text.AlignLeft verticalAlignment: Text.AlignVCenter anchors.fill: parent Component.onCompleted: bubble().initText(); bubble().reUpdateSize(); canvas.requestPaint(); onBubbleIndexChanged: bubble().initText(); bubble().reUpdateSize(); canvas.requestPaint(); function bubble() switch (bubbleIndex) case 0 : return BubbleNormal case 1 : return BubbleBlue case 2 : return BubbleBlack default: return BubbleNormal
代码如上所示,只要用户更改了bubbleIndex值,那么我们就会去马上调用替换后对应的气泡js文件的function(),进行初始化消息、重绘气泡背景。这个组件实现后,我们如果想实现其它的气泡,也可以直接往里加就好了
4.重要组件-实现聊天列表委托源码
/**************************************************************************** ** 聊天列表委托 ** Author : 诺谦 https://www.cnblogs.com/lifexy/ ** Create : 2021-6-12 ****************************************************************************/ import QtQuick 2.12 import QtGraphicalEffects 1.12 import "./bubble" as Bubble import "qrc:/Common.js" as Common Item id: container property var headSrc property var myHeadSrc : "qrc:/head/myhead.jpg" property var bubbleIndex : 0 height: _layout.height + 10 width: ListView.view.width state: msgType states: [ State name: "hint" AnchorChanges target: _layout; anchors.horizontalCenter: container.horizontalCenter; anchors.verticalCenter: container.verticalCenter; , State name: "hintDate" AnchorChanges target: _layout; anchors.horizontalCenter: container.horizontalCenter; anchors.verticalCenter: container.verticalCenter; , State name: "recv" AnchorChanges target: _layout; anchors.left: container.left; anchors.verticalCenter: container.verticalCenter; , State name: "send" AnchorChanges target: _layout; anchors.right: container.right; anchors.verticalCenter: container.verticalCenter; ] Row id: _layout anchors.leftMargin: 20 anchors.rightMargin: 20 spacing: 4 layoutDirection : msgType == "send" ? Qt.RightToLeft : Qt.LeftToRight HeadImage id: _head width : 50 height : 50 headUrl: msgType == "recv" ? headSrc : myHeadSrc visible: msgType == "recv" || msgType == "send" Text id: _hint visible: msgType == "hintDate" || msgType == "hint" text: msgType == "hintDate" ? getChatDate() : msg color: "#B0B0B0" font.pixelSize: 14 font.family: "Microsoft Yahei" wrapMode: Text.WrapAnywhere elide: Text.ElideRight width: container.width - 40 height: 30 horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter Bubble.ChatBubble id: _msg visible: msgType == "recv" || msgType == "send" msgText: msgType == "recv" || msgType == "send" ? msg : "" isSend: msgType == "send" ? true : false iconHeight: _head.height maxWidth: container.width - _layout.anchors.leftMargin * 2 - _head.width * 2 - _layout.spacing * 2 bubbleIndex: container.bubbleIndex // 判断消息时间,与当前时间间隔多久,来动态显示 function getChatDate () var total = new Date() - date; if (total < (1000*60*60*24)) return date.toLocaleTimeString(Qt.locale(), "hh:mm"); else if (total < (1000*60*60*24) * 2) return "昨天 "+date.toLocaleTimeString(Qt.locale(), "hh:mm"); else if (total < (1000*60*60*24) * 3) return "前天 "+date.toLocaleTimeString(Qt.locale(), "hh:mm"); else return date.toLocaleString(Qt.locale(), "yyyy年M月d日 hh:mm");
代码如上所示, 我们会去判断消息类型:
- 如果消息类型是"hint"类型,就直接居中显示。
- 如果消息类型是"hintDate"类型,则调用getChatDate()来动态获取要如何显示时间.
- 如果消息类型是"recv"类型,则靠左显示对方头像,并加上气泡消息
- 如果消息类型是"send"类型,则靠又显示自己头像,并加上气泡消息
android高仿微信图片选择上传工具(代码片段)
...s://github.com/SleepyzzZ/photo-selector话不多说,先上效果图(高仿微信图片选择器):图片选择界面:图片预览界面:批量上传图片:实现的功能介绍:1、图片异步加载,使用Glide开源库实现加载;2、图片的预览... 查看详情
html5的audio实现高仿微信语音播放效果(实际项目)
HTML部分:<divclass="tab-panefadedialog-record"id="dialogRecord"><volistname="dialogRecord"id="record"><divclass="dialog"><spanclass="time">{$record.time}</span><spanclas 查看详情
高仿微信5.2.1主界面及消息提醒
好久没更新博客了,最近在做公司的项目,这也算是我接触的第一个正式项目。通过项目的检验,发现自己积累了一年的知识还是远远不够,想要提高,好的方法是:项目+书+视频+博客。最重要一点:勤动手。最近发现了慕课网... 查看详情
android高仿微信图片选择上传工具(代码片段)
...s://github.com/SleepyzzZ/photo-selector话不多说,先上效果图(高仿微信图片选择器):图片选择界面:图片预览界面:批量上传图片:实现的功能介绍:1、图片异步加载,使用Glide开源库实现加载;2、图片的预览... 查看详情
如何仿微信聊天软件搭建
开发搭建类似微信聊天软件源码要多少钱,仿微信聊天软件源码费用是多少?废话不多说,直接上干货!告诉各位老板,一套源码要收多少费用,在此基础上再添加功能怎么收费。一套源码收费是多少... 查看详情
盘点github上的高仿app项目,b站微博微信等等(代码片段)
...么枯燥。今天给大家介绍GIthub上几个仿造大厂的app项目。高仿微信iOS版:Github地址:https://github.com/nack 查看详情
html5聊天案例|趣聊h5|仿微信界面聊天|红包|语音聊天|地图
之前有开发过一个h5微直播项目,当时里面也用到过聊天模块部分,今天就在之前聊天部分的基础上重新抽离模块,开发了这个h5趣聊项目,功能效果比较类似微信聊天界面。采用html5+css3+Zepto+swiper+wcPop+flex等技术融合开发,实现... 查看详情
wpf截图控件之绘制箭头「仿微信」
...着上周写的截图控件继续更新绘制箭头。1.WPF实现截屏「仿微信」2.WPF实现截屏控件之移动(二)「仿微信」3.WPF截图控件之伸缩(三)「仿微信」4.WPF截图控件之绘制方框与椭圆(四)「仿微信」正文一、首先接着ScreenCut继续发电。1... 查看详情
仿微信添加标签效果
...向微信看齐,微信就是我们的标杆,那我们今天也来仿一仿微信添加的标签功能。只能仿着做了,真是做不到微信的那种体验。甘拜下风。我们上篇学习了shape属性的用法,那我们今天就用shape来做下微信的标签功能。先看一下... 查看详情
仿微信抢红包(js转)
<!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>仿微信抢红包</title><style>html,body,div{margin:0;padding:0;}body{background:#EAEAEA;font:16px/1.8"微软雅黑";paddi 查看详情
htmlcss仿微信底部自己定义菜单
...htmlcss实现微信自己定义菜单效果.不多说直接上代码。/***仿微信自己定义菜单**@authorxuyw*@email[email& 查看详情
javascript实现仿微信抢红包
javascript实现仿微信抢红包 demo效果查看:http://www.w3cfuns.com/notes/14456/53bf08daf9b76230b39519fb399a006a实现代码如下:<!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>仿微信抢红包< 查看详情
vue仿微信网页版|vue+web端聊天室|仿微信客户端vue版(代码片段)
...-router+vue-gemini-scrollbar+swiper+elementUI等技术混合架构开发的仿微信web端聊天室——vueWebChat,实现了发送消息、表情(动图),图片、视频预览,右键菜单、截屏、截图可直接粘贴至文本框进行发送。二、技术框架MVVM框架:Vue2.5... 查看详情
ios仿微信弹出框lpactionsheet(代码片段)
iOS仿微信弹出框LPActionSheetLPActionSheet是一款轻量级的仿微信弹出框安装从CocoaPods安装CocoaPods可以优雅地管理第三方库(具体使用方式我在另一篇文章有详细介绍,这里不再赘述)第一步:在Podfile文件中写入如下代码pod'LPActionSheet'... 查看详情
wpf实现截屏(仿微信)
...件反馈窗体增加截图功能需求,所以今天来实现一个仿微信的截图。01—效果预览效果预览(更多效果请下载源码体验):02—代码如下一、ScreenCut.cs代码如下us 查看详情
如何用微信加陌陌好友?
参考技术A微信怎样加陌陌好友需要双方同时注册微信和陌陌,都可以通过微信或者陌陌互相添加好友,否则无法通过微信添加陌陌好友,两个软件并不能或者联通使用。陌陌怎么加微信好友80分(1)点击微信的“+”下的“添加... 查看详情
html5仿微信聊天界面微信朋友圈实例
这几天使用H5开发了一个仿微信聊天前端界面,尤其微信底部编辑器那块处理的很好,使用HTML5来开发,虽说功能效果并没有微信那么全,但是也相当不错了,可以发送消息、表情,发送的消息自动回滚定位到底部,另外可以对... 查看详情
使用swift3.0高仿新浪微博
项目地址:https://github.com/SummerHH/swift3.0WeBo使用swift3.0高仿微博,目前以实现的功能有,添加访客视图,用户信息授权,首页数据展示(支持正文中连接匹配,@匹配)支持照片浏览,大图浏览,保存图片到相册本地,实现发布微博,发微博添加照... 查看详情