Невозможно записать звук без QMainWindow

У меня проблемы с использованием QAudioRecorder без использования QMainWindow, Это создаст файл с 0 байтами, который не будет воспроизводиться большинством обычных медиаплееров после запуска этого скрипта здесь:

int main(int argc, char *argv[]){
QAudioRecorder q;
q.setAudioInput(q.audioInputs()[0]);
q.setOutputLocation(QUrl::fromLocalFile("simon.amr"));
q.record();
Sleep(10000);
}

Тогда как это работает:

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
};

QAudioRecorder q;

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
std::cout << "DEFAULT: " << q.defaultAudioInput().toStdString() << std::endl;
std::cout << "List: " << q.audioInputs().join(',').toStdString() << std::endl;
std::cout << "STATUS 0: " << q.status() << std::endl;
std::cout << "Location: " << QUrl::fromLocalFile("simon.amr").path().toStdString() << std::endl;
q.setAudioInput(q.audioInputs()[0]);
q.setOutputLocation(QUrl::fromLocalFile("simon.amr"));
q.record();

std::cout << "STATUS 1: " << q.status() << std::endl;
}

MainWindow::~MainWindow()
{
std::cout << "STATUS 2: " << q.status() << std::endl;
}

int main(int argc, char *argv[])
{
QApplication app(argc, argv);

MainWindow recorder;
recorder.show();

return app.exec();
}

Как я могу использовать QAudioRecorder без QMainWindow? Я делаю что-то неправильно?

0

Решение

Внутренние состояния QAudioRecorder управляются через сигналы и слоты. Это требует запуска цикла событий;

QCoreApplication следует использовать для консольных приложений.

QApplication следует использовать для приложений с графическим интерфейсом.

В приведенном выше примере MainWindow даже не требуется, это app.exec (), где происходит волшебство.

2

Другие решения

int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);

QAudioRecorder q;
q.setAudioInput(q.audioInputs()[0]);
q.setOutputLocation(QUrl::fromLocalFile("simon.amr"));
q.record();

return app.exec();
}

Вам нужен цикл событий qt. Sleep не обеспечивает обработку событий и сигналов, предоставляемую QCoreApplication.

Пожалуйста, прочтите его, иначе вы не будете далеко ходить в Qt, так как это основной механизм Qt.

Удачи с вашим проектом!

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector