Слот QTimer не запускается из функции библиотеки

У меня есть основное приложение Qt, и я разрабатываю библиотеку Qt, на которую я ссылаюсь из этого основного приложения. Из основного приложения я хочу вызвать функцию в библиотеке, которая будет что-то делать, а затем в конце подпрограммы вызвать QTimer, который после некоторой задержки запустит слот в коде библиотеки. Я не могу заставить таймер стрелять, и я не уверен, почему. Если я помещу таймер в свое основное приложение, он сработает, как и ожидалось, но не в библиотеке.

На данный момент в моей библиотеке всего один класс. В заголовочном файле моей библиотеки я определяю слот, который я хочу вызвать, как:

private slots:

        void stop();

В файле реализации у меня есть это:

    void MyLib::start() {

        // Create a timer to user during audio operation
        m_GeneralTimer = new QTimer(this);

        // Fire off a oneshot to clear the buffer for fluke-media
        m_GeneralTimer->setInterval(3000);
        m_GeneralTimer->setSingleShot(true);
        connect(m_GeneralTimer, SIGNAL(timeout()), SLOT(stop()));
        m_GeneralTimer->start();
    }
    void MyLib::stop() {

        qDebug() << "Called stop()...";
        m_GeneralTimer->stop();
        delete m_GeneralTimer;
    }

Что мне здесь не хватает, чтобы таймер сработал?

ПРИМЕЧАНИЕ. Вот много моего заголовочного файла - все, что после этого в реальном файле, - это просто вызовы функций:

/// Use shared memory
#include <QSharedMemory>

/// Normal Qt Includes
#include <QBuffer>
#include <QDebug>

/// QTimer is required for calling a method
/// to stop audio playback at a later time
#include <QTimer>

/// Put into a background thread
#include <QtConcurrentRun>

/// Check integrity of received data
#include <QCryptographicHash>

class MYAUDIOLIBSHARED_EXPORT MyLib: public QObject
{

    Q_OBJECT

    public:

            /// /// ///

    private slots:

            void stop();

            /// /// ///
}

person PhilBot    schedule 14.03.2013    source источник
comment
У вас есть макрос Q_OBJECT в вашем классе MyLib?   -  person Frank Osterfeld    schedule 14.03.2013
comment
Да, я делаю - в моем заголовочном файле   -  person PhilBot    schedule 14.03.2013
comment
Не могли бы вы добавить сюда файл ur .h?   -  person s4eed    schedule 14.03.2013


Ответы (1)


Хорошо работает следующий код. Я вставил 3 секунды в функцию start(), и теперь она срабатывает из вызова библиотеки.

    // Create a timer to fire a slot when the playback is done
    m_EndPlayBackTimer = new QTimer(this);
    m_EndPlayBackTimer->setInterval(3000);
    m_EndPlayBackTimer->setSingleShot(true);
    connect(m_EndPlayBackTimer, SIGNAL(timeout()), SLOT(playBackDone()));
    m_EndPlayBackTimer->start(3000);

    // Done
    return;

}

/**
 * @brief
 * Slot to be started by a timer after some time delay
 * to signify that the playback is complete.
 *
 */
void MyLib::playBackDone() {

    #if DEBUG
    qDebug() << "Playback is complete...";
    #endif

}
person PhilBot    schedule 25.03.2013