我在使用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 :(得分:2)
QAudioRecorder的内部状态通过信号和插槽进行管理。这需要一个运行事件循环;
QCoreApplication应该用于控制台应用程序。
QApplication应该用于GUI应用程序。
在上面的示例中,MainWindow甚至不是必需的,它是发现魔法的app.exec()。
答案 1 :(得分: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核心机制。
祝你的项目好运!