gpt4 book ai didi

c++ - QMediaPlayer 应用程序在短时间内多次播放时没有响应

转载 作者:行者123 更新时间:2023-11-28 02:20:58 26 4
gpt4 key购买 nike

我创建了一个默认的 Qt GUI 应用程序,我在主窗口类中添加了 void keyPressEvent(QKeyEvent* ev);,当用户按下空格时,应用程序将播放声音 (ok) 但是当用户在短时间内多次按下,应用程序将无响应。我不知道为什么?请帮助我!

.pro 文件:

QT       += core gui multimedia

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = untitled2
TEMPLATE = app


SOURCES += main.cpp\
mainwindow.cpp

HEADERS += mainwindow.h

FORMS += mainwindow.ui

RESOURCES += \
res.qrc

主窗口.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QMediaPlayer>

namespace Ui { class MainWindow; }

class MainWindow : public QMainWindow {
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
void keyPressEvent(QKeyEvent* ev);
private:
Ui::MainWindow *ui;
QMediaPlayer mp;
};

#endif // MAINWINDOW_H

主窗口.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QKeyEvent>

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{ ui->setupUi(this); }

MainWindow::~MainWindow() { delete ui; }

void MainWindow::keyPressEvent(QKeyEvent* ev) {
switch(ev->key()) {
case Qt::Key_Space: {
mp.setMedia(QUrl("qrc:/sounds/Fireworks.wav"));
mp.play();
break;
}
}
}

主要.cpp

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}

(注:我确实在这里上传了mainwindow.ui.res.qrc)

最佳答案

mp.setMedia(QUrl("qrc:/sounds/Fireworks.wav"));

不要不必要地设置媒体,因为媒体播放器不会在内部检查“哦,媒体是一样的,我要变聪明了”

相反,您希望在再次按下媒体键时从头开始播放媒体。最简单的解决方案是使用一个 bool 值来指示媒体是否已设置。

  case Qt::Key_Space: 
{
if(!is_media_set)
{
mp.setMedia(QUrl("qrc:/sounds/Fireworks.wav"));
is_media_set = true;
}
mp.setPosition(0);
mp.play();
break;
}

如果多个键触发不同的声音,请将 bool 值替换为 current_media_key 以指示最后加载的媒体。

关于c++ - QMediaPlayer 应用程序在短时间内多次播放时没有响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32495534/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com