2013-11-27 4 views
0

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

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? Я делаю что-то неправильно?

+3

Вы должны использовать 'QCoreApplication' или' QApplication', потому что 'QAudioRecorder' требует цикла событий. – Nazar554

+0

: o Это может быть так. Позвольте мне попробовать. – swtdrgn

ответ

2

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

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

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

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

0
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.

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

Смежные вопросы