【QT】常用类

在这里插入图片描述

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

在这里插入图片描述


👉🏻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(); // fragment
    
    url.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 处理响应。

  • 11
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值