当前位置: 首页 > news >正文

Qt Quick 08|QML 综合实战:简易音乐播放器 + 聊天界面

正文

结合前面所有知识点,完成两个综合实战项目,串联布局、控件、动画、列表、样式等核心能力。


案例一:简易音乐播放器

功能:播放 / 暂停按钮、歌曲列表、进度条、背景美化、简单动画

qml

import QtQuick 2.15 import QtQuick.Controls 2.15 import QtMultimedia 5.15 // 多媒体模块 ApplicationWindow { width: 400 height: 300 visible: true title: "QML 简易音乐播放器" // 音乐播放核心 MediaPlayer { id: player source: "qrc:/music/test.mp3" } // 界面布局 Column { anchors.fill: parent spacing: 10 padding: 15 // 歌曲封面 Rectangle { width: 120 height: 120 radius: 60 anchors.horizontalCenter: parent.horizontalCenter color: "#dddddd" } // 进度条 Slider { anchors.horizontalCenter: parent.horizontalCenter width: 300 from: 0 to: player.duration value: player.position } // 控制按钮 Row { anchors.horizontalCenter: parent.horizontalCenter spacing: 20 Button { text: player.playbackState === MediaPlayer.PlayingState ? "暂停" : "播放" onClicked: { if(player.playbackState === MediaPlayer.PlayingState) player.pause() else player.play() } } Button { text: "停止" onClicked: player.stop() } } // 歌曲列表 ListView { width: 300 height: 80 model: ListModel { ListElement { name: "歌曲A" } ListElement { name: "歌曲B" } ListElement { name: "歌曲C" } } delegate: Text { text: name; height: 24 } } } }

说明:项目.pro 文件需添加QT += multimedia多媒体模块。


案例二:简易聊天界面

功能:消息列表、输入框、发送按钮、上下布局、消息气泡样式

qml

import QtQuick 2.15 import QtQuick.Controls 2.15 ApplicationWindow { width: 400 height: 500 visible: true title: "QML 简易聊天界面" Column { anchors.fill: parent spacing: 5 padding: 8 // 聊天消息列表 ListView { id: msgList width: parent.width height: parent.height - 60 clip: true model: ListModel { ListElement { msg: "你好!"; isSelf: false } ListElement { msg: "哈喽~"; isSelf: true } } delegate: Rectangle { width: parent.width height: 40 color: "transparent" // 区分自己消息 / 对方消息 Rectangle { text: msg padding: 8 radius: 6 color: isSelf ? "#91d5ff" : "#f0f0f0" anchors.right: isSelf ? parent.right : undefined anchors.left: !isSelf ? parent.left : undefined anchors.margins: 10 } } } // 底部输入区域 Row { width: parent.width height: 50 spacing: 5 TextField { id: edit width: parent.width - 80 height: 40 placeholderText: "输入消息..." } Button { text: "发送" width: 70 height: 40 onClicked: { if(edit.text !== ""){ msgList.model.append({"msg":edit.text, "isSelf":true}) edit.text = "" } } } } } }

实战总结

  1. 音乐播放器:综合多媒体模块、Slider、ListView、状态判断
  2. 聊天界面:核心是ListView 气泡布局、动态追加数据、基础交互
  3. 两个案例覆盖 QML 80% 常用知识点,可在此基础上扩展头像、表情包、网络通信等功能。
http://www.zskr.cn/news/1501031.html

相关文章:

  • 2026年 拆包机厂家推荐榜单:吨包拆包机/无尘拆包机/密闭式防爆吨袋拆包机,自动与不锈钢碳钢型号实力拆包设备详解 - 品牌发掘
  • 2026年当下,如何选择有名的酒店陶瓷餐具源头厂家:标准与案例剖析 - 品牌鉴赏官2026
  • Android桌面Widget开发示例:支持4个标题切换的列表型小部件
  • AI - 最新大模型编程方面使用指南参考
  • 量子计算中的N-可表示性问题与ADAPT-VQA算法
  • 基于Spring Boot的疫情数据自动采集与ECharts动态图表展示系统(含完整Java源码)
  • 数据的加密与解密(01:54)
  • 深圳技术学校专业适配性评测:4所院校核心维度对比 - 优质品牌商家
  • 多级TT时空求解器在非线性PDE中的应用与优化
  • 终极Aria2GUI完整指南:从命令行到macOS图形界面的技术实现
  • 【2027最新】基于SpringBoot+Vue的智慧校园之家长子系统管理系统源码+MyBatis+MySQL
  • 别再只会用CSS的ease-in-out了:手把手教你用三阶贝塞尔曲线定制iOS/Android动画缓动函数
  • 世毫九实验室(Shardy Lab)原创理论开源与版权声明
  • 从零开始:如何用Neo4j图形数据库构建你的社交推荐系统
  • 数据的加密与解密(01:57)
  • C#微信自动化开发套件:多版本协议DLL、扫码登录注入工具与完整文档
  • 2026年东莞橡胶制品厂家推荐榜:耐低温/阻燃/导电/医用橡胶密封圈及汽车配件、婴儿辅食碗与耐高温硅橡胶无菌垫圈源头厂商精选 - 品牌发掘
  • OpenBangla键盘终极指南:免费开源的孟加拉语输入法解决方案
  • Claude Code对话历史:实现可回溯的AI调试时间线
  • 用STM32F103C8T6的TIM4+DMA驱动WS2812灯带:一个CubeMX配置的避坑实录
  • 深圳 GEO 服务商推荐:2026 年五大权威机构测评与全意图 GEO 价值解析 - GEO优化
  • 2026证件照换衣服保姆级指南:4款小程序手把手教程(附软件对比)
  • 2026上海家庭管道疏通TOP5机构 技术服务全维度解析 - 优质品牌商家
  • STC8H1K17的EEPROM读写:手把手教你封装16位数据读写函数(附完整代码)
  • 2026年q2塑料拉链选购排行:嘉兴双层防爆拉链/嘉兴双拉链/嘉兴塑料拉链/嘉兴尼龙拉链/五大厂家核心维度对比 - 优质品牌商家
  • 分数平均曲率流与毛细边界条件的数学建模与应用
  • ImageJ2完整指南:如何选择最适合您研究需求的科学图像处理方案
  • 全面解读2026年武汉专业的工业滑升门制造商联系方式 - 品牌鉴赏官2026
  • 开源数据恢复:当数字记忆丢失时,PhotoRec如何成为你的救星?
  • 上海 GEO 服务商权威推荐:2026 年五大实力品牌与全意图 GEO 战略意义 - GEO优化