c++ - 没有 QMainWindow 无法录制音频

标签 c++ windows qt audio-recording qtmultimedia

我在不使用 QMainWindow 的情况下使用 QAudioRecorder 时遇到问题。它将创建一个 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();
}

如何在没有QMainWindow 的情况下使用QAudioRecorder?我做错了什么吗?

最佳答案

QAudioRecorder 的内部状态通过信号和槽进行管理。这需要一个正在运行的事件循环;

QCoreApplication应该用于控制台应用程序。

QApplication应该用于 GUI 应用程序。

在您上面的示例中,MainWindow 甚至不是必需的,它是魔法发生的地方 app.exec()。

关于c++ - 没有 QMainWindow 无法录制音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20249002/

相关文章:

windows - 如何在通过文件 ://protocol? 指定的 Remote 上正确设置 Hook

c++ - 在C++中查找像素RGB数据的最快方法是什么?

c++ - 如何像 OpenGL 中的 glRotatef() 一样旋转顶点?

C++ 将二维 float 数组放入 char* 中

c++ - 委托(delegate)模板元编程的问题

windows - CMake 告诉我什么(Windows 上的错误)?

c++ - QT 中 Qpushbutton 内的鼠标按下事件

c++ - 如何将变量从 .sh 脚本传递给 qmake?

c++ - 在我的类中声明的函数未显示在范围内

c++ - 应用于基类列表的覆盖函数