#include
#include
#include
#include
#include
Keyin, QMediaPlayer ko`rsatgichi bo`ladigan player o`zgaruvchisini qo`shamiz. Undan so`ng, keyinroq aniqlanadigan funksiyalarni e’lon qilamiz:
private:
Ui::MainWindow *ui;
QMediaPlayer* player;
public:
void stateChanged(QMediaPlayer::State state);
void positionChanged(qint64 position);
Keyin mainwindow.cpp ni ochamiz va player ni yuklaymiz:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
player = new QMediaPlayer(this);
player->setVolume(ui->volume->value());
connect(player, &QMediaPlayer::stateChanged, this,
&MainWindow::stateChanged);
connect(player, &QMediaPlayer::positionChanged, this,
&MainWindow::positionChanged);
}
QMediaPlayer sinfi bizning dasturimiz tomonidan yuklangan audio fayllarni qo`yish uchun mo`ljallangan asosiy sinf. Shunday qilib, biz qo`yilayotgan audio fayl holatini va uning joriy pozitsiyasini bilishimiz kerak. Bunday ma’lumotlarni uning stateChanged() va positionChanged() signallarini bizning slot funksiyamizga yuborish orqali olishimiz mumkin.
stateChanged() bizga audio faylning joriy qo`yilish holati haqidagi ma’lumotlarni olishga imkon beradi. Keyin biz Push Button tugmasini mos ravishda qo`shamiz va o`chirib qo`yamiz.
void MainWindow::stateChanged(QMediaPlayer::State state)
{
if (state == QMediaPlayer::PlayingState)
{
ui->playButton->setEnabled(false);
ui->pauseButton->setEnabled(true);
ui->stopButton->setEnabled(true);
}
else if (state == QMediaPlayer::PausedState)
{
ui->playButton->setEnabled(true);
ui->pauseButton->setEnabled(false);
ui->stopButton->setEnabled(true);
}
else if (state == QMediaPlayer::StoppedState)
{
ui->playButton->setEnabled(true);
ui->pauseButton->setEnabled(false);
ui->stopButton->setEnabled(false);
}
}
Xuddi positionChanged() va slot funksiyalari kabi, ulardan vaqt chizig`i (timeline)ni bo`laklash uchun, vaqtni hisoblash oynasi sifatida o`rnatamiz:
void MainWindow::positionChanged(qint64 position)
{
if (ui->progressbar->maximum() != player->duration())
ui->progressbar->setMaximum(player->duration());
ui->progressbar->setValue(position);
int seconds = (position/1000) % 60;
int minutes = (position/60000) % 60;
int hours = (position/3600000) % 24;
QTime time(hours, minutes,seconds);
ui->durationDisplay->setText(time.toString());
}
Endi mainwindow.h ni ochamiz va har bir tugma vidjetiga o`ng tugmani bosgan holda, Go to slot... buyrug`ini tanlaymiz va clicked() signalini belgilaymiz. Bu orqali biz muayyan tugma uchun, u bosilganida bajariluvchi ishlarga xos kodlarni tarkibiga oluvchi slotlarni tuzib chiqamiz:
void MainWindow::on_playButton_clicked()
{
player->play();
}
void MainWindow::on_pauseButton_clicked()
{
player->pause();
}
void MainWindow::on_stopButton_clicked()
{
player->stop();
}
Shundan so`ng, Horizontal Slider ga o`ng tugmani bosamiz va Go to slot... buyrug`ini va sliderMoved() signalni tanlab, OK tugmasini bosamiz:
sliderMoved() signali foydalanuvchi audio qo`yilishi pozitsiyasini o`zgartirish uchun uning ustiga bosganida ishga tushadi. Aytaylik, biz bu pozitsiyaning media playerga uzatilishini va unga audio faylning ovozini yoki qo`yilish pozitsiyasini o`zgartirish haqida xabar yuborishini istaymiz. Bunda audio faylning ovoz balandligi qiymatini 0 qilib qo`yishdan ehtiyot bo`lish kerak. Quyidagi kodni ko`rib chiqamiz:
void MainWindow::on_volume_sliderMoved(int position)
{
player->setVolume(position);
}
void MainWindow::on_progressbar_sliderMoved(int position)
{
player->setPosition(position);
}
Endi oldingi loyihamizdagi kabi, File meyular qatorini va uning tarkibida Open File menyusini yaratamiz va unga harakat (action) qo`shamiz.
Do'stlaringiz bilan baham: |