2013-03-14 3 views
0

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

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

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(); 

      /// /// /// 
} 
+0

У вас есть макрос Q_OBJECT в вашем классе MyLib? –

+0

Да, я - в моем заголовочном файле – PhilBot

+0

Не могли бы вы добавить ur .h файл здесь? – saeed

ответ

0

Ну следующий код работает. Я помещаю 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 

}