Проблемы с функцией QTimer::singleShot
Я пытаюсь записать звук с помощью QAudioInput. Согласно документу на этом сайте QAudioInput. Но когда я запустился, он экспортировал пустой файл. После проверки кажется, что функция QTimer::singleShot не работает (я добавил оператор qWarning << "Done"
в void stopRecording()
и он не отображал "Done", так что я подумал, что в 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-программировании.
1 ответ
Ваша программа завершает работу сразу после установки таймера - у нее нет времени на запуск.
Чтобы таймер работал, вам нужно запустить цикл обработки событий. Без цикла обработки событий события не обрабатываются.
Измените последнюю строку вашего main
в
return a.exec();
Также измените ваш тестовый слот, добавив << std::endl
или смывать std::cout
в противном случае вы можете не видеть вывод на консоли.
Ваша программа должна работать так, как ожидалось (за исключением того, что она никогда не завершится, поскольку ничто не приведет к остановке цикла событий - просто прервите его)