#c #qt #qt5
#c #qt #qt5
Вопрос:
заголовок
#ifndef AUDIORECORD_H
#define AUDIORECORD_H
#include <QMediaRecorder>
#include <QAudioRecorder>
#include <QUrl>
class AudioRecorder : public QAudioRecorder
{
Q_OBJECT
public:
AudioRecorder(QObject * parent);
~AudioRecorder(){}
};
#endif // AUDIORECORD_H
Источник
#include "audiorecord.h"
#include<iostream>
using namespace std;
AudioRecorder::AudioRecorder(QObject * parent = 0)
{
this->setOutputLocation(QUrl::fromLocalFile("test.mp3"));
int x = 0;
while ( x > 10000)
{
this->record();
x ;
}
this->stop();
std::cout<<"ndsffsdfn";
}
main.cpp
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include "audiorecord.h"
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QObject p;
AudioRecorder obj(amp;p);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
if (engine.rootObjects().isEmpty())
return -1;
return app.exec();
}
Это не приводит к какой-либо ошибке, но и не записывается. Я не ожидаю какой-либо качественной или полноценной записи.
Я просто хочу посмотреть, как работает этот рекордер.
Этот файл test.mp3 не сохраняется.
Какой минимальный минимум я могу добавить или вычесть из него, чтобы он что-то записал и сохранил?
Ответ №1:
Причина
Что было бы, если бы я сказал вам 10 000 раз: иди купи молока, крепко держа тебя за руку, а затем, прежде чем я отпущу тебя, скажи: Ах, забыл об этом? Сможете ли вы купить молоко?
Вы делаете то же самое со своим кодом:
int x = 0;
while ( x > 10000)
{
this->record();
x ;
}
this->stop();
Вы вызываете 10 000 раз QAudioRecorder::record
, но не позволяете Qt перейти к циклу событий и фактически выполнить вашу команду. Затем, непосредственно перед тем, как Qt перейдет к циклу событий, вы говорите: stop
.
Решение
Прежде всего, вам не нужно создавать подклассы QAudioRecorder
, потому что вы не добавляете в него никаких новых функций. Просто создайте экземпляр класса и используйте его.
Во-вторых, record
и stop
являются слотами. Подключите их к clicked
сигналу соответствующих кнопок в вашем графическом интерфейсе, например:
auto *audioRecorder = new QAudioRecorder(this);
...
connect(btnRecord, amp;QPushButton::clicked, audioRecorder, amp;QAudioRecorder::record);
connect(btnStop, amp;QPushButton::clicked, audioRecorder, amp;QAudioRecorder::stop);
Примечание: Для получения дополнительной информации, пожалуйста, взгляните на пример из документации.