10 небольших демонстраций для начала работы с QT - видеоплеером MP4
10 небольших демонстраций для начала работы с QT - видеоплеером MP4

1. Предисловие

Прошло несколько месяцев с тех пор, как я изучил Qt, но я не выполнял никаких связанных с ним проектов для закрепления. На этот раз я поделюсь 10 небольшими проектами, связанными с Qt, чтобы попрактиковаться в своих навыках.

Видеоплеер MP4 на базе Qt:

  1. Используемая технология — видеобиблиотека, поставляемая с qt.
  2. Дизайн пользовательского интерфейса — это графический дизайн QT
  3. IDE для qtcreator

2. Предварительные знания о воспроизведении видеотеки.

Заголовочные файлы в основном включают в себя следующее:

Язык кода:javascript
копировать
#include <QMediaPlayer>
#include <QMediaPlaylist>
#include <QVideoWidget>

#include <QGraphicsVideoItem>

#include <QFileDialog>
#include <QGraphicsScene>
  1. QMediaPlayer: Основной класс для воспроизведения аудио и видео. Вы можете использовать его для управления медиа-операциями, такими как воспроизведение, пауза, остановка и т. д.
  2. QMediaPlaylist: используется для управления списками воспроизведения мультимедиа. Вы можете добавить несколько медиафайлов в список воспроизведения и управлять порядком воспроизведения, циклическим воспроизведением и т. д.
  3. QVideoWidget: виджет для отображения видео. QVideoWidget можно добавить в окно приложения для отображения воспроизводимого видео.
  4. QGraphicsVideoItem: этот класс используется для отображения элементов в графических сценах Qt. Его можно использовать с QGraphicsView и QGraphicsScene для более гибкого отображения и взаимодействия.
  5. QFileDialog: этот класс используется для отображения диалогового окна выбора файла, чтобы пользователь мог выбирать медиафайлы для воспроизведения.
  6. QGraphicsScene: этот класс является базовым классом графических сцен Qt, используемых для управления и отображения элементов 2D-графики. Вы можете использовать QGraphicsScene для отображения видео или других графических элементов.

Если дополнение показывает, что библиотека не может быть найдена, добавьте: в профайл:

3. Дизайн пользовательского интерфейса

Интерфейс пользовательского интерфейса показан ниже:

4. Написание функций

4.1 Открыть файл

Язык кода:javascript
копировать
void MainWindow::on_openButton_clicked()
{
    QString strCurrentPath = QDir::homePath(); //Получаем текущий каталог системы
    QString strDlgTitle = «Выбрать видеофайл»;
    QString strFilter = "MP4 File(*.mp4);;All File(*.*)";// Включите фильтрацию видеофайлов
    QString strAllFiles = QFileDialog::getOpenFileName(this,strDlgTitle,strCurrentPath,strFilter);

    if(strAllFiles.isEmpty())
    {
        QMessageBox::information(this, "Ошибка", "Не удалось открыть видеофайл, проверьте еще раз", QMessageBox::Да|QMessageBox::No);
        return;
    }
    

    QFileInfo fileInfos(strAllFiles); // Получить информацию о файле
    ui->label_2->setText(fileInfos.fileName());

    player->setMedia(QUrl::fromLocalFile(strAllFiles));
    player->play();
}

4.2 Играть

Язык кода:javascript
копировать
void MainWindow::on_playButton_clicked()
{
    player->play();
}

4.3 Пауза

Язык кода:javascript
копировать
void MainWindow::on_pauseButton_clicked()
{
    player->pause();
}

4.4 Стоп

Язык кода:javascript
копировать
void MainWindow::on_stopButton_clicked()
{
    player->stop();
}

4.5 Управление громкостью

Язык кода:javascript
копировать
void MainWindow::on_pushButton_Sound_clicked()
{
    bool mte=player->isMuted();
    player->setMuted(!mte);

    if(mte)
        ui->pushButton_Sound->setIcon(QIcon(":/new/prefix1/images/volumn.bmp"));
    else
        ui->pushButton_Sound->setIcon(QIcon(":/new/prefix1/images/mute.bmp"));;
}

4.6 Время игры

Язык кода:javascript
копировать
void MainWindow::onDurationChanged(qint64 duration)
{
    ui->horizontalSlider_Position->setMaximum(duration);

    int   секунды=длительность/1000;//секунды
    int   mins=secs/60; //минута
    secs=secs % 60;//оставшиеся секунды
    durationTime=QString::asprintf("%d:%d",mins,secs);
    ui->label_Ratio->setText(positionTime+"/"+durationTime);

}
void VideoPlayer::onPositionChanged(qint64 position)
{
    if (ui->horizontalSlider_Position->isSliderDown())
        return;

    ui->horizontalSlider_Position->setSliderPosition(position);//

    int   секунды=позиция/1000;//секунды
    int   mins=secs/60; //минута
    secs=secs % 60;//оставшиеся секунды
    positionTime=QString::asprintf("%d:%d",mins,secs);
    ui->label_Ratio->setText(positionTime+"/"+durationTime);

}

наконец

Если эта статья была для вас полезна, пожалуйста, поддержите блогера трижды!

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода