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

【QT】常用类

在这里插入图片描述

欢迎来到Cefler的博客😁
🕌博客主页:折纸花满衣
🏠个人专栏:QT

在这里插入图片描述


目录

  • 👉🏻QMediaPlayer
  • 👉🏻QMediaPlaylist
    • setPlaybackMode
  • 👉🏻QDir
  • 👉🏻QFileDialog
  • 👉🏻QList
  • 👉🏻QUrl
  • 👉🏻QNetworkAccessManager
  • 👉🏻QNetworkRequest、QNetworkReply

👉🏻QMediaPlayer

🍎 基本功能

QMediaPlayer 是 Qt 框架中的一个类,用于处理音频和视频的播放。它提供了以下基本功能:

  • 播放音频和视频:能够播放各种格式的音频和视频文件。
  • 控制播放:支持播放、暂停、停止、快进、快退等控制功能。
  • 媒体信息获取:可以获取播放媒体的时长、当前播放位置等信息。
  • 音量和播放速度控制:能够设置音量和播放速度。
  • 播放状态监控:能够响应播放状态的变化,如播放完成、错误发生等。

🍎 常用方法

以下是 QMediaPlayer 的一些常用方法及其功能:

  • play():开始播放媒体。
  • pause():暂停播放。
  • stop():停止播放。
  • setMedia(const QMediaContent &media):设置要播放的媒体内容。
  • setVolume(int volume):设置音量(范围从 0 到 100)。
  • setPlaybackRate(qreal rate):设置播放速度(如 1.0 为正常速度,0.5 为半速,2.0 为双倍速)。
  • currentMedia():获取当前播放的媒体内容。
  • state():获取当前播放状态(如播放中、暂停中、停止中)。
  • duration():获取媒体的总时长(以毫秒为单位)。
  • position():获取当前播放位置(以毫秒为单位)。
  • setPosition(qint64 position):设置播放位置(以毫秒为单位)。

🍎 示例代码

下面是一个简单的示例,展示了如何使用 QMediaPlayer 播放一个音频文件:

#include <QCoreApplication>
#include <QMediaPlayer>
#include <QMediaContent>
#include <QUrl>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 创建 QMediaPlayer 实例QMediaPlayer *player = new QMediaPlayer();// 设置媒体内容(音频文件路径)QMediaContent media(QUrl::fromLocalFile("/path/to/your/audiofile.mp3"));player->setMedia(media);// 设置音量(范围:0 到 100)player->setVolume(50);// 开始播放音频player->play();// 运行应用程序return a.exec();
}

🍎 进阶用法示例

下面是一个更复杂的示例,展示了如何设置播放速度、控制播放位置以及响应播放状态变化:

#include <QCoreApplication>
#include <QMediaPlayer>
#include <QMediaContent>
#include <QUrl>
#include <QTimer>
#include <QDebug>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QMediaPlayer *player = new QMediaPlayer();// 设置媒体内容(音频文件路径)QMediaContent media(QUrl::fromLocalFile("/path/to/your/audiofile.mp3"));player->setMedia(media);// 设置音量player->setVolume(70);// 设置播放速度player->setPlaybackRate(1.5); // 1.5 倍速播放// 开始播放player->play();// 设置定时器用于检查播放状态QTimer *timer = new QTimer();QObject::connect(timer, &QTimer::timeout, [player]() {qDebug() << "Current position:" << player->position();if (player->state() == QMediaPlayer::StoppedState) {qDebug() << "Playback stopped.";}});timer->start(1000); // 每秒检查一次return a.exec();
}

这个示例不仅展示了如何设置播放速度,还使用了定时器来检查播放位置和播放状态。

🍎 注意事项

  • 依赖模块:确保你的 Qt 项目包含了 Qt Multimedia 模块,并在 CMakeLists.txt.pro 文件中进行了正确配置。
  • 平台支持:不同平台对多媒体格式的支持可能有所不同,确保检查 Qt 文档以了解支持的格式和功能。
  • 错误处理:在实际应用中,考虑添加更多的错误处理代码,以提高用户体验和应用的稳定性。

👉🏻QMediaPlaylist

QMediaPlaylist 用于管理和控制多个媒体文件的播放顺序。以下是一些主要功能和常用方法:

基本功能

  • 管理媒体条目:添加、移除和操作播放列表中的媒体条目。
  • 控制播放顺序:设置播放模式,如顺序播放、随机播放或循环播放。
  • 获取播放信息:访问播放列表中的当前媒体和播放位置。

常用方法

  • addMedia(const QMediaContent &content):将媒体文件添加到播放列表。
  • removeMedia(int index):从播放列表中移除指定位置的媒体文件。
  • clear():清空播放列表。
  • setCurrentIndex(int index):设置当前播放的媒体条目索引。
  • next()previous():切换到下一个或上一个媒体条目。
  • setPlaybackMode(QMediaPlaylist::PlaybackMode mode):设置播放模式,如 Sequential, Loop, Random 等。
  • currentIndex():获取当前播放的媒体条目索引。
  • mediaCount():获取播放列表中的媒体条目数量。

示例代码

下面的示例展示了如何使用 QMediaPlaylist 来创建一个播放列表并管理其内容:

#include <QCoreApplication>
#include <QMediaPlayer>
#include <QMediaPlaylist>
#include <QMediaContent>
#include <QUrl>
#include <QDebug>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QMediaPlayer *player = new QMediaPlayer();QMediaPlaylist *playlist = new QMediaPlaylist();// 添加媒体到播放列表playlist->addMedia(QMediaContent(QUrl::fromLocalFile("/path/to/audio1.mp3")));playlist->addMedia(QMediaContent(QUrl::fromLocalFile("/path/to/audio2.mp3")));playlist->addMedia(QMediaContent(QUrl::fromLocalFile("/path/to/audio3.mp3")));// 设置播放模式为随机playlist->setPlaybackMode(QMediaPlaylist::Random);// 设置当前播放的索引playlist->setCurrentIndex(0);// 将播放列表设置给播放器player->setPlaylist(playlist);// 开始播放player->play();return a.exec();
}

在这个示例中,我们创建了一个 QMediaPlaylist 对象,添加了几个媒体文件,设置了播放模式为随机,然后将其分配给 QMediaPlayer 进行播放。你可以根据需要调整播放模式和操作播放列表。

setPlaybackMode

  • QMediaPlaylist::Sequential:这是播放模式的一种,意味着播放列表中的媒体将按照它们在列表中的顺序依次播放。当当前媒体播放完毕时,播放器将自动开始播放列表中的下一个媒体,直到播放列表结束。如果播放列表中的所有媒体都播放完毕,播放器将停在最后一个媒体。

  • 其他播放模式

    • QMediaPlaylist::Loop:播放列表中的媒体将重复播放。播放完列表中的所有媒体后,播放器将重新从列表的开头开始播放。
    • QMediaPlaylist::CurrentItemInLoop:当前播放的媒体将被重复播放。播放列表中的其他媒体不会自动播放,直到手动更改。
    • QMediaPlaylist::Random:媒体将在列表中以随机顺序播放。每次播放列表中的媒体顺序都是随机的。

👉🏻QDir

QDir 是 Qt 提供的一个类,用于简化文件和目录的操作。以下是一些常见用法:

  1. 列出目录内容

    QDir dir("/path/to/directory");
    QStringList files = dir.entryList(QDir::Files);
    
  2. 获取文件信息

    QFileInfo fileInfo("/path/to/file");
    QString fileName = fileInfo.fileName();
    qint64 fileSize = fileInfo.size();
    
  3. 创建目录

    QDir dir;
    if (!dir.exists("/path/to/new/directory")) {dir.mkpath("/path/to/new/directory");
    }
    
  4. 删除目录

    QDir dir("/path/to/directory");
    dir.removeRecursively();
    
  5. 重命名文件

    QDir dir("/path/to/directory");
    dir.rename("oldName.txt", "newName.txt");
    

QDir 提供了丰富的功能来管理文件和目录,使文件系统操作更方便。

👉🏻QFileDialog

QFileDialog 是 Qt 提供的一个对话框类,用于让用户选择文件或目录。它支持多种模式和配置选项,可以用于打开、保存、选择目录等操作。以下是一些常见的用法示例:

基本用法

  1. 打开文件对话框

    #include <QFileDialog>
    #include <QWidget>QString openFile(QWidget *parent) {QString fileName = QFileDialog::getOpenFileName(parent, "Open File", "", "Files (*.*);;Text Files (*.txt);;Images (*.png *.jpg)");return fileName;
    }
    
    • parent:对话框的父窗口。
    • "Open File":对话框的标题。
    • "":默认目录路径。
    • "Files (*.*);;Text Files (*.txt);;Images (*.png *.jpg)":文件过滤器,用于筛选可见文件类型。
  2. 保存文件对话框

    #include <QFileDialog>
    #include <QWidget>QString saveFile(QWidget *parent) {QString fileName = QFileDialog::getSaveFileName(parent, "Save File", "", "Text Files (*.txt);;Images (*.png *.jpg)");return fileName;
    }
    
    • parent:对话框的父窗口。
    • "Save File":对话框的标题。
    • "":默认文件路径和名称。
    • "Text Files (*.txt);;Images (*.png *.jpg)":文件过滤器。
  3. 选择目录对话框

    #include <QFileDialog>
    #include <QWidget>QString selectDirectory(QWidget *parent) {QString directory = QFileDialog::getExistingDirectory(parent, "Select Directory", "");return directory;
    }
    
    • parent:对话框的父窗口。
    • "Select Directory":对话框的标题。
    • "":默认目录路径。

高级用法

  1. 设置对话框选项

    QFileDialog dialog(parent);
    dialog.setFileMode(QFileDialog::ExistingFiles); // 允许选择多个文件
    dialog.setNameFilters(QStringList() << "Images (*.png *.jpg)" << "Text Files (*.txt)");
    dialog.setViewMode(QFileDialog::List); // 以列表模式显示文件
    
  2. 响应用户选择

    QFileDialog dialog(parent);
    dialog.setFileMode(QFileDialog::ExistingFiles);
    if (dialog.exec()) {QStringList selectedFiles = dialog.selectedFiles();// 处理选择的文件for (const QString &file : selectedFiles) {qDebug() << file;}
    }
    
    • dialog.exec():显示对话框并等待用户操作。
    • dialog.selectedFiles():返回用户选择的文件列表(如果选择的是多个文件)。

👉🏻QList

QList 是 Qt 框架中的一个模板类,用于存储和管理一组同类型的对象。它类似于标准 C++ 的 std::vectorstd::list,但提供了更多的功能和便利性来处理 Qt 类型的数据。QList 提供了对动态数组的支持,并且可以存储任意类型的对象,只要这些对象是可拷贝的或可移动的。

基本用法

  1. 创建和初始化 QList

    #include <QList>
    #include <QString>QList<QString> stringList; // 创建一个空的 QList 对象
    

    你可以通过初始化列表或 append() 方法来初始化列表:

    QList<int> numberList = {1, 2, 3, 4, 5}; // 使用初始化列表
    
  2. 添加和插入元素

    QList<QString> stringList;
    stringList.append("Hello");    // 在末尾添加元素
    stringList.prepend("World");   // 在开头添加元素
    stringList.insert(1, "Qt");    // 在指定位置插入元素
    
  3. 访问和修改元素

    QString firstItem = stringList.at(0); // 获取第一个元素
    stringList[1] = "Changed"; // 修改第二个元素
    
    • at(index):返回指定索引位置的元素。
    • operator[]:使用下标操作符访问元素(不检查边界)。
  4. 遍历 QList

    for (const QString &str : stringList) {qDebug() << str;
    }
    

    或使用迭代器:

    for (QList<QString>::const_iterator it = stringList.constBegin(); it != stringList.constEnd(); ++it) {qDebug() << *it;
    }
    
  5. 删除元素

    stringList.removeAt(1);  // 删除指定位置的元素
    stringList.removeOne("Qt"); // 删除第一个匹配的元素
    stringList.clear();  // 删除所有元素
    
    • removeAt(index):删除指定索引位置的元素。
    • removeOne(value):删除第一个匹配的元素。
    • clear():清空所有元素。

特性

  • 动态大小QList 是一个动态数组,可以自动调整大小以适应添加或删除的元素。
  • 支持值类型和指针类型:可以存储任意类型的对象,包括 Qt 自带的类型和用户自定义的类型(需要拷贝构造函数和赋值运算符正常工作)。
  • 内存管理:对于存储指针类型的 QList,需要用户负责对象的内存管理。

👉🏻QUrl

QUrl 是 Qt 框架中的一个类,用于处理和操作 URL(统一资源定位符)。它提供了一种简单的方式来解析、构建和修改 URL,并支持处理常见的 URL 组件,如协议、主机、路径和查询参数。

基本用法

  1. 创建和解析 URL

    #include <QUrl>
    #include <QDebug>QUrl url("https://www.example.com:8080/path/to/resource?query=1#fragment");
    

    QUrl 会自动解析 URL 并将其拆分为各个部分。

  2. 访问和修改 URL 组件

    qDebug() << "Scheme:" << url.scheme();  // https
    qDebug() << "Host:" << url.host();      // www.example.com
    qDebug() << "Port:" << url.port();      // 8080
    qDebug() << "Path:" << url.path();      // /path/to/resource
    qDebug() << "Query:" << url.query();    // query=1
    qDebug() << "Fragment:" << url.fragment(); // fragmenturl.setPath("/new/path"); // 修改路径
    
  3. 构建 URL

    QUrl newUrl;
    newUrl.setScheme("http");
    newUrl.setHost("example.com");
    newUrl.setPath("/path");
    newUrl.setQuery("param=value");qDebug() << newUrl.toString(); // http://example.com/path?param=value
    
  4. 处理 URL 编码

    QString encoded = QUrl::toPercentEncoding("This is a test!");
    QString decoded = QUrl::fromPercentEncoding(encoded.toUtf8());
    
    • QUrl::toPercentEncoding():对字符串进行百分号编码。
    • QUrl::fromPercentEncoding():对百分号编码的字符串进行解码。

特性

  • 支持 URL 解析和构建:可以轻松地解析和构建 URL 的各个部分。
  • 支持 URL 编码:处理 URL 编码和解码。
  • 处理相对 URL:可以处理相对 URL 和基于基础 URL 的解析。

示例代码

#include <QCoreApplication>
#include <QUrl>
#include <QDebug>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QUrl url("https://www.example.com:8080/path/to/resource?query=1#fragment");qDebug() << "Original URL:" << url.toString();qDebug() << "Host:" << url.host();qDebug() << "Port:" << url.port();url.setPath("/new/path");url.setQuery("param=value");qDebug() << "Modified URL:" << url.toString();return a.exec();
}

QUrl 提供了一种强大的方式来处理 URL,在 Qt 应用程序中,它非常有用,特别是当涉及到网络操作时。

👉🏻QNetworkAccessManager

QNetworkAccessManager 是 Qt 框架中用于处理网络请求的类。以下是其基本用法:

  1. 创建 QNetworkAccessManager 实例
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
  1. 发起网络请求

使用 QNetworkAccessManager 发起请求,可以是 GET、POST、PUT 等。以下示例演示如何发起 GET 请求:

QNetworkRequest request(QUrl("https://example.com"));
QNetworkReply *reply = manager->get(request);
  1. 处理请求结果

连接 QNetworkReply 的信号与槽来处理请求结果:

connect(reply, &QNetworkReply::finished, [=]() {if (reply->error() == QNetworkReply::NoError) {QByteArray responseData = reply->readAll();// 处理响应数据} else {// 处理错误qDebug() << "Error:" << reply->errorString();}reply->deleteLater();
});
  1. 发起 POST 请求

示例代码展示如何发起 POST 请求,并发送数据:

QNetworkRequest request(QUrl("https://example.com/submit"));
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");QByteArray postData;
postData.append("key1=value1&key2=value2");QNetworkReply *reply = manager->post(request, postData);
  1. 取消请求

你可以通过 QNetworkReply 对象取消请求:

reply->abort();
  1. 管理 SSL 证书(可选)

如果需要自定义 SSL 证书处理,可以使用 QNetworkAccessManager 的 SSL 配置功能:

connect(manager, &QNetworkAccessManager::sslErrors, [](QNetworkReply* reply, const QList<QSslError>& errors) {// 处理 SSL 错误reply->ignoreSslErrors();
});

以上是 QNetworkAccessManager 的基本用法,能够满足大多数网络请求的需求。

👉🏻QNetworkRequest、QNetworkReply

QNetworkRequest

QNetworkRequest 用于定义网络请求的配置,包括 URL、请求头和 SSL 配置等。

  • 创建请求

    QNetworkRequest request(QUrl("https://example.com"));
    
  • 设置请求头

    request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
    
  • 设置 SSL 配置(可选)

    QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration();
    request.setSslConfiguration(sslConfig);
    

QNetworkReply

QNetworkReply 用于处理网络请求的响应,包括获取数据、处理错误等。

  • 获取数据

    QByteArray responseData = reply->readAll();
    
  • 处理错误

    if (reply->error() != QNetworkReply::NoError) {qDebug() << "Error:" << reply->errorString();
    }
    
  • 连接信号与槽

    connect(reply, &QNetworkReply::finished, [=]() {if (reply->error() == QNetworkReply::NoError) {QByteArray responseData = reply->readAll();// 处理响应数据} else {qDebug() << "Error:" << reply->errorString();}reply->deleteLater();
    });
    
  • 取消请求

    reply->abort();
    

总结:QNetworkRequest 配置请求,QNetworkReply 处理响应。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • php AEAD_AES_256_GCM算法 解密
  • 38. 如何在Spring Boot项目中集成MyBatis-Plus?
  • 读构建可扩展分布式系统:方法与实践04应用服务
  • 低功耗蓝牙模块在健身器材中的应用,让健身体验更智能
  • 【GoMate框架案例】讯飞大模型RAG智能问答挑战赛top10 Baseline
  • vue3常见的bug 修复bug
  • 代码随想录算法训练营day36
  • 老古董Lisp实用主义入门教程(9): 小小先生学习Lisp表达式
  • 微信小程序中的模块化、组件化开发:完整指南
  • 【C++】——string(模拟实现)
  • 全国计算机二级考试C语言篇4——选择题
  • 汇编实现从1加到1000(《X86汇编语言 从实模式到保护模式(第2版》) 第135页第2题解答)
  • 0910作业+思维导图
  • SMA2:代码实现详解——Image Encoder篇(Hiera章)
  • Proxyless Service Mesh:下一代微服务架构体系
  • [ JavaScript ] 数据结构与算法 —— 链表
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 4. 路由到控制器 - Laravel从零开始教程
  • canvas 五子棋游戏
  • Elasticsearch 参考指南(升级前重新索引)
  • Idea+maven+scala构建包并在spark on yarn 运行
  • Magento 1.x 中文订单打印乱码
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • React+TypeScript入门
  • 百度小程序遇到的问题
  • 电商搜索引擎的架构设计和性能优化
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 搞机器学习要哪些技能
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 基于Android乐音识别(2)
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 区块链将重新定义世界
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 再谈express与koa的对比
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • kubernetes资源对象--ingress
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • #1014 : Trie树
  • #微信小程序:微信小程序常见的配置传值
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (附源码)计算机毕业设计高校学生选课系统
  • (七)Flink Watermark
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (十三)Flink SQL
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .Net 6.0--通用帮助类--FileHelper
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器