1.版本介绍(已上传至群里)

版本说明:

  • 添加登录界面、
  • UDP校验登录、
  • 皮肤更换、
  • 3D旋转(主界面和登录界面之间切换) 、

效果图如下所示:

如果效果图加载失败,可以去哔哩哔哩 https://www.bilibili.com/video/BV1ow411R7Dg浏览

项目文件结构如下所示:

下个版本实现:

  • 添加获取好友列表及头像、
  • 好友聊天和表情包收发、
  • 文件收发、

2.核心代码

Login.qml如下所示:

import QtQuick 2.0
import QtGraphicalEffects 1.12
import QtQuick.Controls 2.5
import QtQuick.Layouts 1.12
import Qt.Singleton 1.0
import "qrc:/common"
Rectangle {
id: container
color: "#F5F5F5"
signal closeRequest();
signal loginRequest();
SelectFileDialog {
id: _file
nameFilters: ["image files (*.png *.jpg)"]
folder: XmlCfg.fileOpenUrl
onAccepted: {
console.log("选择了: "+files[0])
if (!XmlCfg.updateHeadImage(files[0])) {
popup.hint = "图片格式读取失败!"
popup.open(); } else { }
}
} Row {
anchors.right: container.right
ImageButton {
imageSrc: "qrc:/res/minimize.png"
backHoverColor: "#E3E3E3" ToolTip.delay: 1000 // 徘徊在按钮上超过500ms则显示,则默认为直接显示
ToolTip.visible: hovered // 当鼠标徘徊在按钮上时,则显示ToolTip
ToolTip.text: qsTr("最小化")
onClicked: {
showMinimized()
}
}
ImageButton {
imageSrc: "qrc:/res/close.png"
hoverimageSrc:"qrc:/res/close_hover.png"
backHoverColor: "#FA5151"
ToolTip.delay: 1000 // 徘徊在按钮上超过500ms则显示,则默认为直接显示
ToolTip.visible: hovered // 当鼠标徘徊在按钮上时,则显示ToolTip
ToolTip.text: qsTr("关闭")
onClicked: closeRequest();
}
} layer.enabled: true
layer.effect: DropShadow {
} YaheiText {
text: "微信"
font.pixelSize: 15
x: 10
y: 6
color: "#8E8E8E"
} ColumnLayout {
id: _center
spacing: 20
anchors.centerIn: parent
opacity: 0.0
HeadImage {
id: _head
radius: 8
width : 100
height : 100
headUrl: XmlCfg.headImage
Layout.alignment: Qt.AlignCenter
Button {
id: _headBtn
anchors.fill: parent
contentItem: Rectangle {
color: "transparent"
}
background: Rectangle {
id: _headBtnBack
color: "transparent"
border.width: 2
border.color: _headBtn.hovered||_loginAnimation.running ? SkinSingleton.skins[XmlCfg.skinIndex].loginColor : "transparent"
radius: _head.radius
}
onClicked: {
_file.open();
}
} }
TextField {
id: _name
placeholderText : "请输入你的昵称"
text: XmlCfg.currentUser
font.family: "Microsoft Yahei"
font.pixelSize: 20
horizontalAlignment: TextField.AlignHCenter
color: "#666"
selectedTextColor: "#fff"
background: Rectangle {
border.width: 0
color: "transparent"
}
Layout.fillWidth: false
Layout.alignment: Qt.AlignCenter
Layout.preferredWidth: 200
onTextChanged: {
XmlCfg.currentUser = _name.text;
} } BaseButton {
id: _login
btnText: "登录"
Layout.fillWidth: true
Layout.alignment: Qt.AlignCenter
bckcolor: SkinSingleton.skins[XmlCfg.skinIndex].loginColor
onClicked: {
_loginAnimation.restart();
XmlCfg.SkinIndex = "2";
Udp.login();
}
}
YaheiText {
id: _loginHint
Layout.alignment: Qt.AlignCenter
text: ""
font.pixelSize: 15
color: SkinSingleton.skins[XmlCfg.skinIndex].loginColor
} } YaheiText {
anchors.horizontalCenter: container.horizontalCenter
anchors.bottom: container.bottom
anchors.bottomMargin: 10
text: "提示: 用户名必须唯一*"
font.pixelSize: 13
color: "#8E8E8E"
} HintPopup {
id: popup
width : 180
height: 120
anchors.centerIn: container
hint: "用户名已被注册!"
} SequentialAnimation {
running: true
NumberAnimation { target: container;
properties: "scale"; from: 0.3; to: 1.0; easing.type: Easing.InOutQuad; duration: 200 }
NumberAnimation { target: _center;
properties: "opacity"; from: 0; to: 1.0; easing.type: Easing.InOutQuad; duration: 300 }
} SequentialAnimation {
id: _loginAnimation
SequentialAnimation {
loops: 4 ScriptAction {
script: _loginHint.text = "登录中."
}
NumberAnimation {
target: _headBtnBack;
property: "opacity";
from: 1.0; to: 0.0; duration: 200
}
ScriptAction {
script: _loginHint.text = "登录中.."
}
NumberAnimation {
target: _headBtnBack;
property: "opacity";
from: 0.0; to: 1.0; duration: 200
}
ScriptAction {
script: {
_loginHint.text = "登录中..."
}
}
PauseAnimation { duration: 100 }
} ScriptAction {
script: {
_loginHint.text = "登录成功!"
}
}
PauseAnimation { duration: 1000 } }
Connections {
target: Udp;
onLoginResult:{
if (result) {
_loginAnimation.stop();
_loginHint.text = "用户名已被注册!"
popup.hint = "用户名已被注册!"
popup.open();
}
}
} Connections {
target: _loginAnimation;
onFinished:{
console.log(" OK ");
loginRequest();
}
} function initialize() {
_loginHint.text = "";
} }

MainWindow.qml如下所示:

import QtQuick 2.12
import QtGraphicalEffects 1.12
import QtQuick.Controls 2.5
import QtQuick.Layouts 1.12
import Qt.Singleton 1.0
import "qrc:/common"
import "qrc:/bar"
Rectangle {
id: container signal closeRequest();
signal returnRequest(); gradient: SkinSingleton.skins[XmlCfg.skinIndex] RowLayout { anchors.fill: parent
spacing: 0
MenuBar {
Layout.preferredWidth: 60
Layout.fillHeight: true
onReturnRequest: container.returnRequest(); }
Rectangle {
color: Qt.rgba(1,1,1, 0.5 + XmlCfg.skinOpacity * 0.3 )
Layout.preferredWidth: 200
Layout.fillHeight: true
}
Rectangle {
id: rct
color: Qt.rgba(1,1,1,0.5 + XmlCfg.skinOpacity * 0.5)
Layout.fillWidth: true
Layout.fillHeight: true Row {
anchors.right: rct.right
ImageButton {
imageSrc: "qrc:/res/minimize.png"
backHoverColor: "#E3E3E3" ToolTip.delay: 1000 // 徘徊在按钮上超过500ms则显示,则默认为直接显示
ToolTip.visible: hovered // 当鼠标徘徊在按钮上时,则显示ToolTip
ToolTip.text: qsTr("最小化")
onClicked: {
showMinimized()
}
}
ImageButton {
imageSrc: "qrc:/res/close.png"
hoverimageSrc:"qrc:/res/close_hover.png"
backHoverColor: "#FA5151"
ToolTip.delay: 1000 // 徘徊在按钮上超过500ms则显示,则默认为直接显示
ToolTip.visible: hovered // 当鼠标徘徊在按钮上时,则显示ToolTip
ToolTip.text: qsTr("关闭")
onClicked: closeRequest();
}
}
}
} layer.enabled: true
layer.effect: DropShadow {
} }

未完待续~

37.qt quick- 高仿微信实现局域网聊天V3版本(添加登录界面、UDP校验登录、皮肤更换、3D旋转)的更多相关文章

  1. 40.qt quick- 高仿微信实现局域网聊天V4版本(支持gif动图表情包、消息聊天、拖动缩放窗口)

    在上章37.qt quick- 高仿微信实现局域网聊天V3版本(添加登录界面.UDP校验登录.皮肤更换.3D旋转),我们已经实现了: 添加登录界面. UDP校验登录. 皮肤更换. 3D旋转(主界面和登 ...

  2. 28.qt quick-ListView高仿微信好友列表和聊天列表

    1.视图模型介绍  在Qml中.常见的View视图有: ListView: 列表视图,视图中数据来自ListModel.XmlListModel或c++中继承自QAbstractItemModel或Q ...

  3. 31.qt quick-使用SwipeView添加滑动视图-高仿微信V2版本

    在上章我们学习了ListView,然后实现了: 28.qt quick-ListView高仿微信好友列表和聊天列表,本章我们来学习SwipeView滑动视图,并出高仿微信V2版本: 1.Contain ...

  4. 转-Fragment+ViewPager组件(高仿微信界面)

    http://www.cnblogs.com/lichenwei/p/3982302.html 什么是ViewPager? 关于ViewPager的介绍和使用,在之前我写过一篇相关的文章<安卓开 ...

  5. GSD_WeiXin(高仿微信)应用源码

    高仿微信计划:已经实现功能 1.微信首页(cell侧滑编辑.下拉眼睛动画.下拉拍短视频.点击进入聊天详情界面) 2.通讯录(联系人字母排序.搜索界面) 3.发现(朋友圈) 4.我(界面) 待实现功能( ...

  6. Android高仿微信(一)——如何消除启动时的白屏

    默认情况下,APP启动时会先把屏幕刷成白色,然后才绘制第一个Activity中的View,这两个步骤之间的延迟会造成启动后先看到白屏(时间大概为1秒左右).时间不长,但是我们也看到,一般的APP时不存 ...

  7. 安卓开发笔记——Fragment+ViewPager组件(高仿微信界面)

    什么是ViewPager? 关于ViewPager的介绍和使用,在之前我写过一篇相关的文章<安卓开发复习笔记——ViewPager组件(仿微信引导界面)>,不清楚的朋友可以看看,这里就不再 ...

  8. 实例源码--IOS高仿微信打飞机游戏(完整功能)

    下载源码 技术要点: 1. IOS游戏开发基础框架 2. 高仿打飞机游戏 3. 游戏背景音频技术 4.源码详细的中文注释 ……. 详细介绍: 1. IOS游戏开发基础框架 此套源码为涉及IOS游戏开发 ...

  9. Android 高仿微信实时聊天 基于百度云推送

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38799363 ,本文出自:[张鸿洋的博客] 一直在仿微信界面,今天终于有幸利用百 ...

随机推荐

  1. SPEC 2000 整形和浮点性能测试结果是各项基准程序得分的几何平均值,几何平均值是 n 个数连乘之 后再开 n 次根号

    SPEC 2000 能够生成多种格式的测试结果报表,包括 asc,ps,raw,pdf,html 等格式,报 表所在目录为/home/sepc2000­all/result. 整形和浮点性能测试结果是 ...

  2. ace-editor

    1. ace-editor编辑器只读状态:editor.setReadOnly(true);  // false to make it editable 2. ace-editor设置程序语言模式:e ...

  3. ES6笔记2

    ES6笔记2 Promise Promise 是 ES6 引入的异步编程的新解决方案,语法上是一个构造函数 一共有3种状态,pending(进行中).fulfilled(已成功)和rejected(已 ...

  4. 从马尔可夫模型(Markov Model)到隐马尔可夫模型(Hidden Markov Model)

    1.参考资料: 博客园 - 刘建平随笔:https://www.cnblogs.com/pinard/p/6945257.html 哔站up主 - 白手起家的百万富翁:https://www.bili ...

  5. uni-app 富文本解析-小程序

    原文:http://www.upwqy.com/manual/info/105.html 1 引入插件 gaoyia-parse 链接:https://pan.baidu.com/s/1UusfXxH ...

  6. ImportError:no mudle named 'cv2'

    提供一下下载的网址:OpenCV,速度比较慢. 我的anaconda版本Python是3.6的,直接提供百度云下载: 链接:https://pan.baidu.com/s/1Xz9JrE2m-dwPv ...

  7. TVM自定义数据类型

    TVM自定义数据类型 本文将介绍"自定义数据类型"框架,该框架可在TVM中使用自定义数据类型. 介绍 在设计加速器时,关键是如何近似地表示硬件中的实数.这个问题具有长期的行业标准解 ...

  8. TensorRT 7.2.1开发初步

    TensorRT 7.2.1开发初步 TensorRT 7.2.1开发人员指南演示了如何使用C ++和Python API来实现最常见的深度学习层.它显示了如何采用深度学习框架构建现有模型,并使用该模 ...

  9. 性能监控工具之Grafana+Prometheus+Exporters

    在本模块中,我将把几个常用的监控部分给梳理一下.前面我们提到过,在性能监控图谱中,有操作系统.应用服务器.中间件.队列.缓存.数据库.网络.前端.负载均衡.Web 服务器.存储.代码等很多需要监控的点 ...

  10. AgileConfig轻量级配置中心1.3.0发布,支持多用户权限控制

    AgileConfig 当初是设计给我自己用的一个工具,所以只设置了一道管理员密码,没有用户的概念.但是很多同学在使用过后都提出了需要多用户支持的建议.整个团队或者整个公司都使用同一个密码来管理非常的 ...