1

私の環境はQt5 32bit Windows 7 64bit MSVC 2010 32bit

私のコードはシンプルな音楽プレーヤーです

これがメインコードです

slider = new QSlider(Qt::Horizontal);
slider->setRange(0, 100);
player->setMedia(QUrl::fromLocalFile("D://test.mp3"));
player->setVolume(50);
...
connect(player, SIGNAL(bufferStatusChanged(int)), slider, SLOT(setValue(int)));

このプレーヤーを実行すると、音楽を再生できましたが、値はslider変わりませんでした。

次に、これを追加します。

connect(player, SIGNAL(bufferStatusChanged(int)), slider, SLOT(helloWorld(int)));
...
void player::helloWorld(int)
{
    qDebug() << "hello, world";
}

もう一度実行しましたが、文字列hello, worldが印刷されないことがわかりました。

何も印刷されていません。

なぜ値がslider変わらないのですか?

-------------------------完全なコード----------------------- ---

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{

    mainWidget = new QWidget();
    HLayout = new QHBoxLayout();
    VLayout = new QVBoxLayout();

    playButton = new QPushButton("Okay");
    exitButton = new QPushButton("Exit");
    slider = new QSlider(Qt::Horizontal);
    player = new QMediaPlayer();

    connect(playButton, SIGNAL(toggled(bool)), this, SLOT(playOrPause(bool)));
    connect(player, SIGNAL(bufferStatusChanged(int)), slider, SLOT(setValue(int)));
    connect(player, SIGNAL(bufferStatusChanged(int)), this, SLOT(test(int)));
    player->setMedia(QUrl::fromLocalFile("D://test.mp3"));
    player->play();
    player->setVolume(50);
    slider->setRange(0, 100);


    //UI
    exitButton->setAutoDefault(true);
    playButton->setAutoDefault(true);
    playButton->setCheckable(true);

    HLayout->addStretch();
    HLayout->addWidget(playButton);
    HLayout->addWidget(exitButton);

    VLayout->addWidget(slider);
    VLayout->addStretch();
    VLayout->addLayout(HLayout);

    mainWidget->setLayout(VLayout);

    setCentralWidget(mainWidget);
    setWindowIcon(QIcon(":/icons/icon.png"));
    setWindowTitle("YUCOAT");

    //connect(playButton, SIGNAL(toggled(bool)), this, SLOT(playOrPause(bool)));
    //connect(player, SIGNAL(bufferStatusChanged(int)), slider, SLOT(setValue(int)));

}

MainWindow::~MainWindow()
{

}

void MainWindow::playOrPause(bool s)
{
    if (s)
        player->play();
    else
        player->pause();

}

void MainWindow::test(int s)
{
    qDebug() << "hello, world!";
    qDebug() << s;
    qDebug() << player->mediaStatus();
}
4

1 に答える 1

1

ドキュメントによると:

プレーヤーオブジェクトがバッファリングしているとき。このプロパティは、いっぱいになった一時バッファのパーセンテージを保持します。再生を再開する前に、バッファが100%満たされる必要があります。その時点で、MediaStatusはBufferedMediaになります。

メディアをロードした後に接続を確立しているため、おそらくバッファはすでにQMediaPlayer::BufferedMedia状態になっているため、信号は送信されません。接続前にメディアステータスを印刷することで確認できます。

qDebug() << player->mediaStatus();
于 2013-01-14T12:27:57.283 に答える