我正在尝试通过QAudioInput录制声音。根据本网站的文档QAudioInput。但是当我跑步时,它导出了一个空的原始文件。检查后,看起来函数QTimer :: singleShot不起作用(我在qWarning << "Done"
中添加了语句void stopRecording()
并且它没有显示“完成”所以我认为它在QTimer中有一些错误: :singleShot功能)。
这是我用来检查QTimer :: singleShot
功能的代码----Check.pro----
QT += core
QT -= gui
TARGET = Check
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
HEADERS += test.h
-----test.h------
#ifndef TEST_H
#define TEST_H
#include <QCoreApplication>
#include <QTimer>
#include <iostream>
#include <QObject>
#include <test.h>
#include <QDebug>
using namespace std;
class Object: public QObject {
Q_OBJECT
private slots:
void func() { cout << "Hello"; }
};
#endif // TEST_H
----main.cpp----
#include <QCoreApplication>
#include <QTimer>
#include <iostream>
#include <QObject>
#include <test.h>
#include <QDebug>
using namespace std;
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Object *o = new Object;
QTimer::singleShot(10000, o, SLOT(func()));
return 0;
}
此代码也不起作用。有人能解释一下吗?我是Qt-programming的新手。
答案 0 :(得分:2)
您的程序在设置计时器后立即退出 - 它没有时间触发。
要使计时器起作用,您需要运行一个事件循环。没有事件循环,就不会处理任何事件。
将main
的最后一行更改为
return a.exec();
还可以通过添加<< std::endl
或刷新std::cout
来更改测试版,否则您可能会在控制台上看不到输出。
您的程序应该按预期工作(除非它不会完成,因为没有任何东西会导致事件循环停止 - 只是中断它)。