1

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 プログラミングの初心者です。

4

1 に答える 1

2

プログラムは、タイマーを設定した直後に終了します。起動する時間がありません。

タイマーが機能するには、イベント ループが実行されている必要があります。イベント ループがなければ、イベントは処理されません。

の最後の行をに変更しmainます

return a.exec();

また、追加<< std::endlまたはフラッシュしてテストスロットを変更してください。std::coutそうしないと、コンソールに出力が表示されない場合があります。

その後、プログラムは期待どおりに動作するはずです (ただし、イベント ループが停止する原因は何もないため、終了することはありません。中断するだけです)。

于 2013-07-28T16:26:23.310 に答える